3
\$\begingroup\$

I have an Activity called AuthActivity and I would like all of my authentication Fragments to be in this Activity. I will have 4 Fragments: LoginFragment, RegisterFragment, ForgotPasswordFragment and RememberedLoginFragment. I currently only have the LoginFragment and I would like some feedback before I continue making the others. I would like some feedback on all of the code, Java and XML.

fragment_login.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
 xmlns:android="http://schemas.android.com/apk/res/android"
 android:id="@+id/fragment_login"
 android:layout_width="match_parent"
 android:layout_height="match_parent"
 android:orientation="vertical">
 <View
 android:id="@+id/loginTopView"
 android:layout_width="match_parent"
 android:layout_height="0dp"
 android:layout_weight="1"
 android:background="@color/colorPrimary" />
 <RelativeLayout
 android:id="@+id/loginCenterView"
 android:layout_width="match_parent"
 android:layout_height="0dp"
 android:layout_weight="5"
 android:background="@color/colorAccent">
 <ImageView
 android:id="@+id/loginLogo"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:layout_centerInParent="true"
 android:src="@drawable/ic_logo"
 android:contentDescription="@string/logo" />
 </RelativeLayout>
 <RelativeLayout
 android:id="@+id/loginBottomView"
 android:layout_width="match_parent"
 android:layout_height="0dp"
 android:layout_weight="10"
 android:padding="15dp"
 android:background="@color/colorPrimary">
 <EditText
 android:id="@+id/loginEmail"
 android:layout_width="match_parent"
 android:layout_height="wrap_content"
 android:layout_alignParentTop="true"
 android:hint="@string/email"
 android:inputType="textEmailAddress"
 android:textColor="@android:color/white"
 android:textColorHint="#AAFFFFFF" />
 <EditText
 android:id="@+id/loginPassword"
 android:layout_width="match_parent"
 android:layout_height="wrap_content"
 android:layout_below="@id/loginEmail"
 android:hint="@string/password"
 android:inputType="textPassword"
 android:textColor="@android:color/white"
 android:textColorHint="#AAFFFFFF" />
 <CheckBox
 android:id="@+id/loginRememberMe"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:layout_below="@id/loginPassword"
 android:text="@string/remember_me" />
 <CheckBox
 android:id="@+id/loginStayLoggedIn"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:layout_below="@id/loginRememberMe"
 android:text="@string/stay_logged_in" />
 <Button
 android:id="@+id/loginButton"
 android:layout_width="match_parent"
 android:layout_height="wrap_content"
 android:layout_below="@id/loginStayLoggedIn"
 android:text="@string/login"
 android:textAllCaps="false" />
 <TextView
 android:id="@+id/loginForgotPassword"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:layout_below="@id/loginButton"
 android:layout_centerHorizontal="true"
 android:textColor="@android:color/white"
 android:text="@string/forgot_password" />
 <TextView
 android:id="@+id/loginRegisterLink"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:layout_alignParentBottom="true"
 android:layout_centerHorizontal="true"
 android:textColor="@android:color/white"
 android:text="@string/register_link_text" />
 </RelativeLayout>
</LinearLayout>

LoginFragment.java:

public class LoginFragment extends Fragment {
 @Override
 public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
 return inflater.inflate(R.layout.fragment_login, container, false);
 }
}

activity_auth.xml:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
 xmlns:android="http://schemas.android.com/apk/res/android"
 android:id="@+id/activity_auth"
 android:layout_width="match_parent"
 android:layout_height="match_parent" />

AuthActivity.java:

public class AuthActivity extends FragmentActivity {
 @Override
 protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.activity_auth);
 if (savedInstanceState != null) {
 return;
 }
 LoginFragment loginFragment = new LoginFragment();
 loginFragment.setArguments(getIntent().getExtras());
 getSupportFragmentManager().beginTransaction().add(R.id.activity_auth, loginFragment).commit();

Here is an image of the result: enter image description here

200_success
145k22 gold badges190 silver badges478 bronze badges
asked Dec 19, 2016 at 4:12
\$\endgroup\$

1 Answer 1

2
\$\begingroup\$

Well, since there is hardly any Java code to review I'll review your xml code.

It is good practice to combine attributes that your layouts/views have in common in your /res/values/styles.xml file. F.e. :

<style name="LayoutStyleMatchParent"> 
 <item name="android:layout_width">match_parent</item>
 <item name="android:layout_height">match_parent</item>
</style> 
<style name="LayoutStyleWrapContent"> 
 <item name="android:layout_width">wrap_content</item>
 <item name="android:layout_height">wrap_content</item>
 </style>
<style name="LayoutStyleWide"> 
 <item name="android:layout_width">match_parent</item>
 <item name="android:layout_height">wrap_content</item>
 </style>
<style name="EditTextStyle" parent="LayoutStyleWide">
 <item name="android:textColor">@android:color/white</item>
 <item name="android:textColorHint">#AAFFFFFF</item>
</style>
<style name="EditTextLogin" parent="EditTextStyle">
 <item name="android:hint">@string/email</item>
 <item name="android:inputType">textEmailAddress</item>
 <item name="android:layout_alignParentTop">true</item>
</style>
<style name="EditTextPassword" parent="EditTextStyle">
 <item name="android:hint">@string/password</item>
 <item name="android:inputType">textPassword</item>
 <item name="android:layout_below">@id/loginEmail</item>
</style>
<style name="CheckBoxRememberMe" parent="LayoutStyleWrapContent">
 <item name="android:layout_below">@id/loginPassword</item>
 <item name="android:text="@string/remember_me"</item>
</style>
<style name="CheckBoxStayLoggedIn" parent="LayoutStyleWrapContent">
 <item name="android:layout_below="@id/loginRememberMe"</item>
 <item name="android:text="@string/stay_logged_in"</item>
</style>

etc...

This minimizes code duplication and you can reuse/extend these styles in your other Fragments

So this part of your xml code :

 <EditText
 android:id="@+id/loginEmail"
 android:layout_width="match_parent"
 android:layout_height="wrap_content"
 android:layout_alignParentTop="true"
 android:hint="@string/email"
 android:inputType="textEmailAddress"
 android:textColor="@android:color/white"
 android:textColorHint="#AAFFFFFF" />
 <EditText
 android:id="@+id/loginPassword"
 android:layout_width="match_parent"
 android:layout_height="wrap_content"
 android:layout_below="@id/loginEmail"
 android:hint="@string/password"
 android:inputType="textPassword"
 android:textColor="@android:color/white"
 android:textColorHint="#AAFFFFFF" />
 <CheckBox
 android:id="@+id/loginRememberMe"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:layout_below="@id/loginPassword"
 android:text="@string/remember_me" />
 <CheckBox
 android:id="@+id/loginStayLoggedIn"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:layout_below="@id/loginRememberMe"
 android:text="@string/stay_logged_in" />

then could look like this :

 <EditText
 android:id="@+id/loginEmail"
 style="@style/EditTextLogin" />
 <EditText
 android:id="@+id/loginPassword"
 style="@style/EditTextPassword" />
 <CheckBox
 android:id="@+id/loginRememberMe"
 style="@style/CheckBoxRememberMe" />
 <CheckBox
 android:id="@+id/loginStayLoggedIn"
 style="@style/CheckBoxStayLoggedIn" />
answered Dec 19, 2016 at 18:43
\$\endgroup\$

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

By clicking "Post Your Answer", you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.