From 093265f52c16964bb240936a4e59136a1c52fef8 Mon Sep 17 00:00:00 2001 From: dmorozov Date: Mon, 19 Sep 2022 14:32:06 +0300 Subject: [PATCH 1/4] Update dependencies - Update gradle to latest version - Update buildToolsVersion - Update CompileSdkVerson - Update TargetSdkVersion - Migrate ButterKnife to ViewBinding - Fix manifest issues - Fix OpenGl issues --- build.gradle | 10 +- demo/build.gradle | 48 +++----- demo/src/main/AndroidManifest.xml | 10 +- .../java/com/yalantis/starwarsdemo/App.java | 5 - .../starwarsdemo/adapter/ProfileAdapter.java | 56 +++++---- .../starwarsdemo/view/DemoActivity.java | 37 +++--- .../starwarsdemo/view/GreetingsFragment.java | 30 +---- .../starwarsdemo/view/SideFragment.java | 109 ++++++------------ demo/src/main/res/layout/activity_demo.xml | 12 +- .../main/res/layout/fragment_greetings.xml | 51 ++++---- demo/src/main/res/raw/star_frag.glsl | 2 +- gradle.properties | 6 +- gradle/wrapper/gradle-wrapper.properties | 3 +- library/build.gradle | 10 +- library/src/main/AndroidManifest.xml | 8 +- library/src/main/res/raw/tiles_frag.glsl | 2 +- 16 files changed, 156 insertions(+), 243 deletions(-) diff --git a/build.gradle b/build.gradle index e370516..2a7aacb 100644 --- a/build.gradle +++ b/build.gradle @@ -2,12 +2,11 @@ buildscript { repositories { - jcenter() - maven { url 'https://maven.fabric.io/public' } + google() + mavenCentral() } dependencies { - classpath 'com.android.tools.build:gradle:2.1.0-alpha3' - classpath 'io.fabric.tools:gradle:1.21.0' + classpath 'com.android.tools.build:gradle:7.3.0' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files @@ -16,7 +15,8 @@ buildscript { allprojects { repositories { - jcenter() + google() + mavenCentral() } } diff --git a/demo/build.gradle b/demo/build.gradle index ad840a5..fa1ac37 100644 --- a/demo/build.gradle +++ b/demo/build.gradle @@ -1,29 +1,13 @@ -buildscript { - repositories { - maven { url 'https://maven.fabric.io/public' } - } - - dependencies { - classpath 'io.fabric.tools:gradle:1.21.0' - } -} apply plugin: 'com.android.application' -repositories { - maven { url 'https://maven.fabric.io/public' } -} - -apply plugin: 'io.fabric' - - android { - compileSdkVersion 23 - buildToolsVersion '23.0.2' + compileSdkVersion 33 + buildToolsVersion '30.0.3' defaultConfig { applicationId "com.yalantis.starwarsdemo" minSdkVersion 15 - targetSdkVersion 23 + targetSdkVersion 33 versionCode 1 versionName "0.1.0" } @@ -33,22 +17,20 @@ android { proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } - dataBinding { - enabled = false + buildFeatures { + viewBinding = true } } dependencies { - compile fileTree(dir: 'libs', include: ['*.jar']) - testCompile 'junit:junit:4.12' - compile 'com.android.support:appcompat-v7:23.1.1' - compile 'com.android.support:design:23.1.1' - compile 'com.jakewharton.timber:timber:4.1.0' - compile 'com.jakewharton:butterknife:7.0.1' - compile 'com.android.support:recyclerview-v7:23.1.1' - compile 'com.android.support:percent:23.1.1' - compile project(':library') - compile('com.crashlytics.sdk.android:crashlytics:2.5.3@aar') { - transitive = true; - } + implementation project(':library') + implementation fileTree(dir: 'libs', include: ['*.jar']) + + implementation 'com.android.support:appcompat-v7:23.1.1' + implementation 'com.android.support:design:23.1.1' + implementation 'com.android.support:recyclerview-v7:23.1.1' + implementation 'com.android.support:percent:23.1.1' + + implementation "com.jakewharton.timber:timber:4.7.1" + testImplementation 'junit:junit:4.13.2' } diff --git a/demo/src/main/AndroidManifest.xml b/demo/src/main/AndroidManifest.xml index fb9d454..0630180 100644 --- a/demo/src/main/AndroidManifest.xml +++ b/demo/src/main/AndroidManifest.xml @@ -1,22 +1,22 @@ + package="com.yalantis.starwarsdemo"> - + + android:label="@string/sw_lib_name"> + android:exported="true"> diff --git a/demo/src/main/java/com/yalantis/starwarsdemo/App.java b/demo/src/main/java/com/yalantis/starwarsdemo/App.java index dddbbbf..3c87e7b 100644 --- a/demo/src/main/java/com/yalantis/starwarsdemo/App.java +++ b/demo/src/main/java/com/yalantis/starwarsdemo/App.java @@ -2,9 +2,6 @@ import android.app.Application; import android.content.Context; - -import com.crashlytics.android.Crashlytics; -import io.fabric.sdk.android.Fabric; import timber.log.Timber; /** @@ -16,9 +13,7 @@ public class App extends Application{ @Override public void onCreate() { super.onCreate(); - Fabric.with(this, new Crashlytics()); app = this; - Timber.plant(new Timber.DebugTree()); } diff --git a/demo/src/main/java/com/yalantis/starwarsdemo/adapter/ProfileAdapter.java b/demo/src/main/java/com/yalantis/starwarsdemo/adapter/ProfileAdapter.java index cb43260..bb4baa8 100644 --- a/demo/src/main/java/com/yalantis/starwarsdemo/adapter/ProfileAdapter.java +++ b/demo/src/main/java/com/yalantis/starwarsdemo/adapter/ProfileAdapter.java @@ -1,23 +1,23 @@ package com.yalantis.starwarsdemo.adapter; import android.content.Context; -import android.support.annotation.LayoutRes; import android.support.annotation.Nullable; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; -import android.view.View; import android.view.ViewGroup; import android.widget.CompoundButton; import android.widget.TextView; +import androidx.viewbinding.ViewBinding; + import com.yalantis.starwarsdemo.R; +import com.yalantis.starwarsdemo.databinding.ItemProfileGenderBinding; +import com.yalantis.starwarsdemo.databinding.ItemProfileOtherBinding; +import com.yalantis.starwarsdemo.databinding.ItemProfileSideBinding; import com.yalantis.starwarsdemo.interfaces.ProfileAdapterListener; import com.yalantis.starwarsdemo.model.User; import com.yalantis.starwarsdemo.widget.BackgroundDrawableSwitchCompat; -import butterknife.Bind; -import butterknife.ButterKnife; - /** * Created by Artem Kholodnyi on 11/17/15. */ @@ -61,21 +61,19 @@ public int getItemViewType(int position) { @Override public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { - @LayoutRes int layoutRes = getLayoutId(viewType); - - View itemView = LayoutInflater.from(parent.getContext()).inflate(layoutRes, parent, false); - return new ViewHolder(itemView); + ViewBinding binding = inflateWithBinding(parent, viewType); + return new ViewHolder(binding); } - @LayoutRes - private int getLayoutId(int viewType) { + private ViewBinding inflateWithBinding(ViewGroup parent, int viewType) { + LayoutInflater inflater = LayoutInflater.from(parent.getContext()); switch (viewType) { case VIEW_TYPE_SIDE: - return R.layout.item_profile_side; + return ItemProfileSideBinding.inflate(inflater, parent, false); case VIEW_TYPE_TEXT_FIELD: - return R.layout.item_profile_other; + return ItemProfileOtherBinding.inflate(inflater, parent, false); case VIEW_GENDER_FIELD: - return R.layout.item_profile_gender; + return ItemProfileGenderBinding.inflate(inflater, parent, false); default: throw new IllegalStateException(); } @@ -89,12 +87,9 @@ public void onBindViewHolder(final ViewHolder holder, int position) { // holder.getBinding().setVariable(BR.callback, mListener); // holder.getBinding().setVariable(BR.user, mUser); holder.mySwitch.setCheckedImmediate(mUser.isDarkSide()); - holder.mySwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { - @Override - public void onCheckedChanged(final CompoundButton buttonView, final boolean isChecked) { - mListener.onSideSwitch(holder.mySwitch); - } - }); + holder.mySwitch.setOnCheckedChangeListener((CompoundButton.OnCheckedChangeListener) + (buttonView, isChecked) -> + mListener.onSideSwitch(holder.mySwitch)); holder.label.setText(mUser.getSideText()); break; case 1: @@ -122,22 +117,25 @@ public int getItemCount() { return 5; } - public class ViewHolder extends RecyclerView.ViewHolder { + class ViewHolder extends RecyclerView.ViewHolder { @Nullable - @Bind(R.id.side_switch) BackgroundDrawableSwitchCompat mySwitch; - @Nullable - @Bind(R.id.tv_label) TextView label; - @Nullable - @Bind(R.id.tv_value) TextView value; - public ViewHolder(View itemView) { - super(itemView); - ButterKnife.bind(this, itemView); + public ViewHolder(ViewBinding binding) { + super(binding.getRoot()); + if (binding instanceof ItemProfileSideBinding) { + mySwitch = ((ItemProfileSideBinding) binding).sideSwitch; + label = ((ItemProfileSideBinding) binding).tvLabel; + } else if (binding instanceof ItemProfileOtherBinding) { + label = ((ItemProfileOtherBinding) binding).tvLabel; + value = ((ItemProfileOtherBinding) binding).tvValue; + } else if (binding instanceof ItemProfileGenderBinding) { + label = ((ItemProfileGenderBinding) binding).tvLabel; + } } } } diff --git a/demo/src/main/java/com/yalantis/starwarsdemo/view/DemoActivity.java b/demo/src/main/java/com/yalantis/starwarsdemo/view/DemoActivity.java index a6b7a3a..db16f24 100644 --- a/demo/src/main/java/com/yalantis/starwarsdemo/view/DemoActivity.java +++ b/demo/src/main/java/com/yalantis/starwarsdemo/view/DemoActivity.java @@ -12,6 +12,7 @@ import android.support.v7.app.AppCompatActivity; import com.yalantis.starwarsdemo.R; +import com.yalantis.starwarsdemo.databinding.ActivityDemoBinding; import com.yalantis.starwarsdemo.interfaces.DemoActivityInterface; import com.yalantis.starwarsdemo.interfaces.GreetingFragmentInterface; import com.yalantis.starwarsdemo.interfaces.TilesRendererInterface; @@ -19,16 +20,14 @@ import java.util.List; -import butterknife.Bind; -import butterknife.ButterKnife; /** * Created by Artem Kholodnyi on 11/11/15. */ public class DemoActivity extends AppCompatActivity implements GreetingFragmentInterface, DemoActivityInterface, TilesRendererInterface { - @Bind(R.id.gl_surface_view) - GLSurfaceView mGlSurfaceView; + + private ActivityDemoBinding binding; private SideFragment mDarkFragment; private SideFragment mBrightFragment; @@ -37,9 +36,8 @@ public class DemoActivity extends AppCompatActivity implements GreetingFragmentI @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - - setContentView(R.layout.activity_demo); - ButterKnife.bind(this); + binding = ActivityDemoBinding.inflate(getLayoutInflater()); + setContentView(binding.getRoot()); // Check if the system supports OpenGL ES 2.0. final ActivityManager activityManager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE); @@ -48,12 +46,12 @@ protected void onCreate(Bundle savedInstanceState) { if (supportsEs2) { // Request an OpenGL ES 2.0 compatible context. - mGlSurfaceView.setEGLContextClientVersion(2); + binding.glSurfaceView.setEGLContextClientVersion(2); // Set the renderer to our demo renderer, defined below. - ParticleSystemRenderer mRenderer = new ParticleSystemRenderer(mGlSurfaceView); - mGlSurfaceView.setRenderer(mRenderer); - mGlSurfaceView.setRenderMode(GLSurfaceView.RENDERMODE_CONTINUOUSLY); + ParticleSystemRenderer mRenderer = new ParticleSystemRenderer(binding.glSurfaceView); + binding.glSurfaceView.setRenderer(mRenderer); + binding.glSurfaceView.setRenderMode(GLSurfaceView.RENDERMODE_CONTINUOUSLY); } else { throw new UnsupportedOperationException(); } @@ -67,13 +65,13 @@ protected void onCreate(Bundle savedInstanceState) { @Override protected void onPause() { super.onPause(); - mGlSurfaceView.onPause(); + binding.glSurfaceView.onPause(); } @Override protected void onResume() { super.onResume(); - mGlSurfaceView.onResume(); + binding.glSurfaceView.onResume(); } private void showGreetings() { @@ -86,15 +84,10 @@ private void showGreetings() { @Override public void onSetupProfileClick() { - new Handler().post(new Runnable() { - @Override - public void run() { - getSupportFragmentManager().beginTransaction() - .setCustomAnimations(R.anim.slide_upward, 0) - .add(R.id.container, BrightSideFragment.newInstance(), "bright") - .commit(); - } - }); + new Handler().post(() -> getSupportFragmentManager().beginTransaction() + .setCustomAnimations(R.anim.slide_upward, 0) + .add(R.id.container, BrightSideFragment.newInstance(), "bright") + .commit()); } diff --git a/demo/src/main/java/com/yalantis/starwarsdemo/view/GreetingsFragment.java b/demo/src/main/java/com/yalantis/starwarsdemo/view/GreetingsFragment.java index 1dd1de7..9d800e4 100644 --- a/demo/src/main/java/com/yalantis/starwarsdemo/view/GreetingsFragment.java +++ b/demo/src/main/java/com/yalantis/starwarsdemo/view/GreetingsFragment.java @@ -3,27 +3,21 @@ import android.os.Bundle; import android.support.annotation.Nullable; import android.support.v4.app.Fragment; -import android.support.v7.widget.Toolbar; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import com.yalantis.starwarsdemo.R; +import com.yalantis.starwarsdemo.databinding.FragmentGreetingsBinding; import com.yalantis.starwarsdemo.interfaces.GreetingFragmentInterface; -import butterknife.Bind; -import butterknife.ButterKnife; -import butterknife.OnClick; - /** * Created by Artem Kholodnyi on 11/17/15. */ public class GreetingsFragment extends Fragment { public final static String TAG = GreetingsFragment.class.getCanonicalName(); - @Bind(R.id.toolbar) - Toolbar mToolbar; - + private FragmentGreetingsBinding binding; private GreetingFragmentInterface mListener; public static GreetingsFragment newInstance() { @@ -39,26 +33,14 @@ public void onActivityCreated(@Nullable Bundle savedInstanceState) { @Nullable @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { - View view = inflater.inflate(R.layout.fragment_greetings, container, false); - ButterKnife.bind(this, view); - return view; + binding = FragmentGreetingsBinding.inflate(getLayoutInflater(savedInstanceState), container, false); + return binding.getRoot(); } @Override public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); - mToolbar.setNavigationIcon(R.drawable.ic_menu); - } - - @Override - public void onDestroyView() { - super.onDestroyView(); - ButterKnife.unbind(this); - } - - @OnClick(R.id.btn_setup_profile) - void onClick() { - mListener.onSetupProfileClick(); + binding.toolbar.setNavigationIcon(R.drawable.ic_menu); + binding.btnSetupProfile.setOnClickListener(v -> mListener.onSetupProfileClick()); } - } diff --git a/demo/src/main/java/com/yalantis/starwarsdemo/view/SideFragment.java b/demo/src/main/java/com/yalantis/starwarsdemo/view/SideFragment.java index 3865fa2..62daa4c 100644 --- a/demo/src/main/java/com/yalantis/starwarsdemo/view/SideFragment.java +++ b/demo/src/main/java/com/yalantis/starwarsdemo/view/SideFragment.java @@ -2,41 +2,32 @@ import android.animation.Animator; import android.animation.ObjectAnimator; -import android.app.Activity; +import android.content.Context; import android.graphics.Rect; import android.os.Build; import android.os.Bundle; import android.support.annotation.StyleRes; -import android.support.design.widget.AppBarLayout; -import android.support.design.widget.CollapsingToolbarLayout; import android.support.v4.app.Fragment; import android.support.v7.view.ContextThemeWrapper; import android.support.v7.widget.LinearLayoutManager; -import android.support.v7.widget.RecyclerView; import android.support.v7.widget.SwitchCompat; import android.support.v7.widget.Toolbar; import android.view.LayoutInflater; -import android.view.MenuItem; import android.view.View; import android.view.ViewAnimationUtils; import android.view.ViewGroup; import android.view.animation.AccelerateInterpolator; -import android.widget.ImageView; -import com.yalantis.starwars.TilesFrameLayout; import com.yalantis.starwars.interfaces.TilesFrameLayoutListener; import com.yalantis.starwarsdemo.R; import com.yalantis.starwarsdemo.adapter.ProfileAdapter; +import com.yalantis.starwarsdemo.databinding.FragmentSideBinding; import com.yalantis.starwarsdemo.interfaces.DemoActivityInterface; import com.yalantis.starwarsdemo.interfaces.ProfileAdapterListener; import com.yalantis.starwarsdemo.interfaces.TilesRendererInterface; import com.yalantis.starwarsdemo.model.User; import com.yalantis.starwarsdemo.widget.ClipRevealFrame; -import butterknife.Bind; -import butterknife.ButterKnife; -import butterknife.OnClick; - /** * Created by Artem Kholodnyi on 11/19/15. */ @@ -47,27 +38,14 @@ public abstract class SideFragment extends Fragment implements ProfileAdapterLis public static final String ARG_SHOULD_EXPAND = "should expand"; private static final long ANIM_DURATION = 250L; protected float mRadius; - @Bind(R.id.recycler) - RecyclerView mRecycler; - @Bind(R.id.toolbar) - Toolbar mToolbar; - @Bind(R.id.header) - ImageView mHeader; - @Bind(R.id.tessellation_frame_layout) - TilesFrameLayout mTilesFrameLayout; - @Bind(R.id.collapsing_toolbar_layout) - CollapsingToolbarLayout mCollapsingToolbarLayout; - @Bind(R.id.app_bar_layout) - AppBarLayout mAppBarLayout; - private View mRootView; - private Toolbar.OnMenuItemClickListener onMenuItemClickListener = new Toolbar.OnMenuItemClickListener() { - @Override - public boolean onMenuItemClick(final MenuItem item) { - if (R.id.action_close == item.getItemId()) { - doBreak(); - } - return false; + + private FragmentSideBinding binding; + + private Toolbar.OnMenuItemClickListener onMenuItemClickListener = item -> { + if (R.id.action_close == item.getItemId()) { + doBreak(); } + return false; }; private TilesRendererInterface mTilesListener; private DemoActivityInterface mDemoActivityInterface; @@ -81,23 +59,22 @@ public void onResume() { @Override public void onPause() { super.onPause(); - mTilesFrameLayout.onPause(); + binding.tessellationFrameLayout.onPause(); } @Override - public void onAttach(Activity activity) { - super.onAttach(activity); - if (activity instanceof TilesRendererInterface) { - if (activity instanceof TilesRendererInterface) { - mTilesListener = (TilesRendererInterface) activity; - } - if (activity instanceof DemoActivityInterface) { - mDemoActivityInterface = (DemoActivityInterface) activity; - } + public void onAttach(Context context) { + super.onAttach(context); + if (context instanceof TilesRendererInterface) { + mTilesListener = (TilesRendererInterface) context; + } + if (context instanceof DemoActivityInterface) { + mDemoActivityInterface = (DemoActivityInterface) context; } } - abstract @StyleRes int getTheme(); + abstract @StyleRes + int getTheme(); protected Animator createCheckoutRevealAnimator(final ClipRevealFrame view, int x, int y, float startRadius, float endRadius) { setMenuVisibility(false); @@ -148,11 +125,11 @@ private void removeOldSideFragment() { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { - mRootView = inflater.cloneInContext(new ContextThemeWrapper(getContext(), getTheme())) - .inflate(R.layout.fragment_side, container, false); + binding = FragmentSideBinding.inflate(getLayoutInflater(savedInstanceState).cloneInContext(new ContextThemeWrapper(getContext(), getTheme())), container, false); + final Bundle args = getArguments(); if (args != null) { - mRootView.addOnLayoutChangeListener(new View.OnLayoutChangeListener() { + binding.getRoot().addOnLayoutChangeListener(new View.OnLayoutChangeListener() { @Override public void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) { @@ -174,25 +151,25 @@ public void onLayoutChange(View v, int left, int top, int right, int bottom, int }); } - ButterKnife.bind(this, mRootView); - return mRootView; + return binding.getRoot(); } - - - @Override public void onViewCreated(View view, Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); - mTilesFrameLayout.setOnAnimationFinishedListener(this); - mRecycler.setLayoutManager(new LinearLayoutManager(getContext())); - mRecycler.setAdapter(new ProfileAdapter(getContext(), getUser(), this)); - setUpToolbar(mToolbar); - mHeader.setImageResource(getUser().getPhotoRes()); + binding.tessellationFrameLayout.setOnAnimationFinishedListener(this); + binding.recycler.setLayoutManager(new LinearLayoutManager(getContext())); + binding.recycler.setAdapter(new ProfileAdapter(getContext(), getUser(), this)); + setUpToolbar(binding.toolbar); + binding.header.setImageResource(getUser().getPhotoRes()); if (getArguments() != null) { - mAppBarLayout.setExpanded(getArguments().getBoolean(ARG_SHOULD_EXPAND), false); + binding.appBarLayout.setExpanded(getArguments().getBoolean(ARG_SHOULD_EXPAND), false); } + + binding.btnSave.setOnClickListener(v -> { + doBreak(); + }); } @Override @@ -212,13 +189,6 @@ private void setUpToolbar(final Toolbar toolbar) { abstract User getUser(); - - @Override - public void onDestroyView() { - super.onDestroyView(); - ButterKnife.unbind(this); - } - @Override public void onSideSwitch(SwitchCompat v) { Rect rect = new Rect(); @@ -230,7 +200,7 @@ public void onSideSwitch(SwitchCompat v) { if (this instanceof BrightSideFragment && v.isChecked()) { cx = rect.right - halfThumbWidth; postGoToSide(cy, cx, "dark"); - } else if (!v.isChecked()){ + } else if (!v.isChecked()) { cx = rect.left + halfThumbWidth; postGoToSide(cy, cx, "bright"); } @@ -248,7 +218,7 @@ public void run() { } private boolean isAppBarExpanded() { - return mAppBarLayout != null && mAppBarLayout.getBottom() == mAppBarLayout.getHeight(); + return binding.appBarLayout.getBottom() == binding.appBarLayout.getHeight(); } public int getStatusBarHeight() { @@ -264,9 +234,7 @@ public void doBreak() { if (mDemoActivityInterface != null) { mDemoActivityInterface.removeAllFragmentExcept(getTagString()); } - if (mTilesFrameLayout != null) { - mTilesFrameLayout.startAnimation(); - } + binding.tessellationFrameLayout.startAnimation(); } @Override @@ -277,9 +245,4 @@ public void onAnimationFinished() { } public abstract String getTagString(); - - @OnClick(R.id.btn_save) - void onClick() { - doBreak(); - } } diff --git a/demo/src/main/res/layout/activity_demo.xml b/demo/src/main/res/layout/activity_demo.xml index 5974871..11c8d68 100644 --- a/demo/src/main/res/layout/activity_demo.xml +++ b/demo/src/main/res/layout/activity_demo.xml @@ -1,19 +1,17 @@ + android:layout_width="match_parent" + android:layout_height="match_parent" + android:orientation="vertical"> + android:layout_height="match_parent" /> + android:layout_height="match_parent" /> \ No newline at end of file diff --git a/demo/src/main/res/layout/fragment_greetings.xml b/demo/src/main/res/layout/fragment_greetings.xml index b39d3fe..3b182da 100644 --- a/demo/src/main/res/layout/fragment_greetings.xml +++ b/demo/src/main/res/layout/fragment_greetings.xml @@ -1,60 +1,57 @@ + android:layout_width="match_parent" + android:layout_height="match_parent" + android:orientation="vertical"> + android:layout_height="?android:attr/actionBarSize" /> + android:textColor="@android:color/white" + android:textSize="22sp" />