I have a dialog fragment in my app with an autocompletetextview in it, but the drop-down list instead of align with the soft keyboard's top, is placed behind, not giving access to some of the items.
Here is the layout:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:padding="10dp"
android:orientation="horizontal"
android:windowSoftInputMode="adjustPan|adjustResize">
<android.widget.AutoCompleteTextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:id="#+id/customDialogAtocompleteTextview"
android:layout_weight=".7"
android:layout_gravity="top" />
<LinearLayout
android:orientation="vertical"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight=".3">
<Button
android:id="#+id/customDialogBtOk"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Aceptar"/>
<Button
android:id="#+id/customDialogBtSearch"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Buscar"/>
<Button
android:id="#+id/customDialogBtMore"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Mas"/>
</LinearLayout>
</LinearLayout>
So how can I make it to align with the keyboard?
Theory says that android:windowSoftInputMode="adjustPan|adjustResize"should do this but for some reason it doesn't, so you have to do the same programmatically:
getDialog().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
Aand the magic happens!!!
[update]
in my case.. cause i use bottomShetDialogFragment with autocomplete inside. drop down not show cause i not set dropdownanchor for autocomplete.
just add android:dropDownAnchor="#id/layout_above_this_autocomplete" and work perfect
ad news style in your style.xml
<style name="AppBottomSheetDialogTheme" parent="Theme.Design.Light.BottomSheetDialog">
<item name="bottomSheetStyle">#style/AppModalStyle</item>
<item name="android:windowIsFloating">false</item>
<item name="android:windowSoftInputMode">adjustResize</item>
</style>
<style name="AppModalStyle" parent="Widget.Design.BottomSheet.Modal">
<item name="behavior_peekHeight">400dp</item>
</style>
in your bottomshetdialog framgnet.
oncreate -> setStyle(DialogFragment.STYLE_NORMAL, R.style.AppBottomSheetDialogTheme)
override fun getTheme(): Int {
return R.style.AppBottomSheetDialogTheme
}
Related
I'm having some troubles setting a theme to PreferenceFragmentCompat trying to achieve this:
I have these styles set:
<style name="AppThemeBase" parent="Theme.MaterialComponents.Light.NoActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">#color/colorPrimary</item>
<item name="colorPrimaryDark">#color/colorPrimaryDark</item>
<item name="colorAccent">#color/colorAccent</item>
<item name="android:windowLightStatusBar">true</item>
<item name="android:statusBarColor">#color/status_bar</item>
<item name="colorControlNormal">#color/colorPrimary</item>
<item name="preferenceTheme">#style/AppThemeBase.RecordingPreferencesTheme</item>
</style>
<style name="AppThemeBase.RecordingPreferencesTheme" parent="#style/PreferenceThemeOverlay">
<item name="android:textColorPrimary">#FD0000</item>
<item name="android:textColorSecondary">#1F6F2B</item>
</style>
With this options I can see what I want to achieve in Android Studio layout preview but when it does not have effect when I execute it
The result when I execute:
The only thing it worked so far is using <item name="android:textColor">#FD0000</item> that will change the tittle colour but I can't find a way to change the summary colour.
Another question I have is if there is a way to set the theme just for that preference fragment instead of using it in all preferences fragments. Using android:theme at the root of the fragment layout isn't working for me :(
Update:
As per #Susan question this is how I try to use android:theme at the root of the fragment layout I've created this theme based in the main one
<style name="RecordingPreferenceTheme" parent="AppThemeBase">
<item name="preferenceTheme">#style/AppThemeBase.RecordingPreferencesTheme</item>
</style>
And this is the preference layout where I have a fragment which will inflate the PreferenceFragmentCompat
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:theme="#style/RecordingPreferenceTheme">
<include
android:id="#+id/include"
layout="#layout/toolbar"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<fragment
android:id="#+id/fragment_container_settings"
android:name="com.example.app.RecordSettingsFragment$RecordPreferences"
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="#+id/include" />
</androidx.constraintlayout.widget.ConstraintLayout>
And at the root of the layout I'll set android:theme="#style/RecordingPreferenceTheme" but it doesn't work, just changes in the main theme set in Activity will have some effect. I've already tried customize PreferenceFragmentCompat layout with same results.
Cheers!!
See this sample project here created for your specific case the the only problem for this solution is you have to create your preference from code cant use xml file to inflate and
for those who just want the gist of this solution is that use setLayoutResource() method to set layout and use custom layout i just copied the original layout and hardcoded colors according to #Bhuntupana need
val messagesCategory = PreferenceCategory(context).apply {
layoutResource = R.layout.sample_preference
key = "messages_category"
title = getString(R.string.messages_header)
screen.addPreference(this)
}
Update
use layout tag to specify layout resource to use like this
<EditTextPreference
android:layout="#layout/sample_preference"
app:key="signature"
app:title="#string/signature_title"
app:useSimpleSummaryProvider="true" />
sample_preference.xml just copy of default layout preference_material.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?android:attr/selectableItemBackground"
android:baselineAligned="false"
android:clipToPadding="false"
android:gravity="center_vertical"
android:minHeight="?android:attr/listPreferredItemHeightSmall"
android:paddingStart="?android:attr/listPreferredItemPaddingStart"
android:paddingLeft="?android:attr/listPreferredItemPaddingLeft"
android:paddingEnd="?android:attr/listPreferredItemPaddingEnd"
android:paddingRight="?android:attr/listPreferredItemPaddingRight">
<include layout="#layout/image_frame" />
<RelativeLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:paddingTop="16dp"
android:paddingBottom="16dp">
<TextView
android:id="#android:id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ellipsize="marquee"
android:singleLine="true"
android:textAppearance="?android:attr/textAppearanceListItem"
android:textColor="#FD0000" />
<TextView
android:id="#android:id/summary"
style="#style/PreferenceSummaryTextStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="#android:id/title"
android:layout_alignStart="#android:id/title"
android:layout_alignLeft="#android:id/title"
android:layout_gravity="start"
android:maxLines="10"
android:textAlignment="viewStart"
android:textColor="#1F6F2B" />
</RelativeLayout>
<!-- Preference should place its actual preference widget here. -->
<LinearLayout
android:id="#android:id/widget_frame"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:gravity="end|center_vertical"
android:orientation="vertical"
android:paddingStart="16dp"
android:paddingLeft="16dp"
android:paddingEnd="0dp"
android:paddingRight="0dp" />
</LinearLayout>
I need to use segmented control in Android. Is there a default control for the same? What might be the best and efficient way to do so?
This will work:
<TableLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="#dimen/padding_extreme"
android:stretchColumns="*">
<TableRow
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="#dimen/padding_very_less"
android:background="#color/colorBlack"
android:padding="#dimen/padding_very_less">
<TextView
android:id="#+id/seg_one"
style="#style/barGrapButtons"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="0dp"
android:background="#color/colorBlack"
android:text="SegmentOne"
android:textColor="#color/colorWhite" />
<TextView
android:id="#+id/seg_two"
style="#style/barGrapButtons"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="SegmentTwo" />
<TextView
android:id="#+id/seg_three"
style="#style/barGrapButtons"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="SegmentThree" />
</TableRow>
</TableLayout>
res/values/styles.xml
<style name="barGrapButtons">
<item name="android:textColor">#color/colorBlack</item>
<item name="android:textSize">#dimen/small_text</item>
<item name="android:gravity">center|center_horizontal</item>
<item name="android:clickable">true</item>
<item name="android:padding">#dimen/padding_five_dp</item>
<item name="android:background">#color/colorWhite</item>
<item name="android:layout_marginLeft">1dp</item>
</style>
I guess you are speaking about fragments with tabs on the top. There will be many answers if you search for Tabbed Activity. However, a simple way to start off with is
Right-click in the package - > New -> Activity - > Tabbed Activity
An activity with tabs and fragments will be automatically created which works as the flow which you have shown in the image.
I have the following setup:
<android.support.design.widget.NavigationView
style="#style/NavigationView"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="start"
app:itemTextAppearance="#style/DrawerTextAppearance"
app:menu="#menu/drawer"/>
menu/drawer.xml
<menu>
<item
android:id="#+id/messages_item"
android:icon="#drawable/ic_notifications_neg"
app:actionLayout="#layout/counter"
android:title="#string/message_center"/>
<item
android:id="#+id/search_item"
android:icon="#drawable/ic_search_neg"
android:title="#string/search"/>
</menu>
layout/counter.xml
<TextView
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="26dp"
android:layout_height="26dp"
android:text="55"
style="#style/Bubble"/>
style:
<style name="Bubble" parent="android:Widget.TextView">
<item name="android:gravity">center</item>
<item name="android:layout_gravity">center_vertical</item>
<item name="android:textColor">#android:color/white</item>
<item name="android:background">#drawable/bubble</item>
</style>
this produces the following result:
the bubble is shown at the top despite style's gravity setting.
How can I position the actionLayout in the middle of a menu item?
I managed to solve the problem by accident.
I had to put the TextView inside a container:
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="horizontal">
<TextView
android:id="#+id/counterView"
style="#style/Bubble"
android:layout_width="26dp"
android:layout_height="26dp"
android:text="55"/>
</LinearLayout>
Now the counter is shown right in the middle of the menu item!
UPDATE
Counter changing code:
TextView view = (TextView) drawer.getMenu().findItem(R.id.counter_item).getActionView().findViewById(R.id.counterView);
view.setText("" + count);
Try below:
In layout/counter.xml use
android:gravity="right|center_vertical"
<TextView
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="26dp"
android:layout_height="26dp"
android:text="55"
android:gravity="right|center_vertical"
style="#style/Bubble"/>
I am writing my first real Android application. I have an Android DialogFragment that I am displaying to allow users to add or edit details of a selected item. The DialogFragment pops up and displays fine in full screen mode. However, on the Lollipop emulator when I click on EditText widgets that are lower on the screen, the soft keyboard covers up the widget, rather than scrolling the screen up so that the user may see what they are typing. I do NOT experience this behavior in the pre-Lollipop emulator. On the KitKat emulator, the screen adjusts so that the EditText is still visible. StackOverflow will not let me post pictures yet. So, you'll have to use your imagination. :-( I have tried different ways to overcome this issue. Unfortunately, none have worked for Lollipop.
UPDATE - I have tested this on a Sony Xperia Z3 Compact running Android 5.0.2, and the DialogFragment does not scroll or adjust the screen when selecting the lower EditText widgets.
Here are the styles in use:
<!-- Base application theme. -->
<style name="AppTheme" parent="AppTheme.Base">
<!-- Customize your theme here. -->
</style>
<style name="AppTheme.Base" parent="Theme.AppCompat.Light.NoActionBar">
<item name="colorPrimary">#color/colorPrimary</item>
<item name="colorPrimaryDark">#color/colorPrimaryDark</item>
<item name="colorAccent">#color/colorAccent</item>
<item name="android:textColorPrimary">#color/colorPrimaryText</item>
<item name="android:textColorSecondary">#color/colorSecondaryText</item>
<item name="android:dialogTheme">#style/DialogTheme</item>
<item name="android:actionBarStyle">#style/AppActionBarTheme</item>
<item name="actionBarStyle">#style/AppActionBarTheme</item>"
<item name="actionBarTheme">#style/AppActionBarTheme</item>
<item name="actionBarPopupTheme">#style/AppActionBarOverflowMenuTheme</item>
<item name="windowActionModeOverlay">true</item>
</style>
<style name="DialogTheme" parent="Theme.AppCompat.Light.Dialog">
<item name="android:clickable">true</item>
<item name="colorPrimary">#color/colorPrimary</item>
<item name="colorPrimaryDark">#color/colorPrimaryDark</item>
<item name="colorAccent">#color/colorAccent</item>
<item name="android:windowSoftInputMode">stateHidden|adjustResize</item>
<item name="windowActionModeOverlay">true</item>
</style>
As you can see in the DialogTheme, I have included the android:windowSoftInputMode attribute. I have also tried using that attribute in the AndroidManifest.xml file under the Activity that ultimately contains the DialogFragment. Here is the XML layout file for the DialogFragment:
<?xml version="1.0" encoding="utf-8"?>
<com.ahappydevelopment.android.fishtales.views.LogEditView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="#dimen/dialog_margin_top"
android:background="#color/background_material_light"
android:theme="#style/DialogTheme">
<include
android:id="#+id/app_bar"
layout="#layout/app_bar_edit" />
<ScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="#id/app_bar">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingBottom="#dimen/activity_vertical_margin"
android:paddingLeft="#dimen/activity_horizontal_margin"
android:paddingRight="#dimen/activity_horizontal_margin"
android:paddingTop="#dimen/activity_vertical_margin">
<Button
android:id="#+id/btnCatchDate"
style="?android:attr/borderlessButtonStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_alignParentTop="true"
android:textAllCaps="false" />
<Button
android:id="#+id/btnCatchTime"
style="?android:attr/borderlessButtonStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:textAllCaps="false" />
<EditText
android:id="#+id/editLatitudeLabel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_below="#id/btnCatchDate"
android:ems="10"
android:hint="#string/label_latitude"
android:inputType="numberDecimal" />
<EditText
android:id="#+id/editLongitudeLabel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_below="#id/editLatitudeLabel"
android:ems="10"
android:hint="#string/label_longitude"
android:inputType="numberDecimal" />
<ImageView
android:id="#+id/imgCatchPicture"
android:layout_width="75dp"
android:layout_height="75dp"
android:layout_alignParentEnd="true"
android:layout_alignParentRight="true"
android:layout_alignTop="#id/editLatitudeLabel"
android:background="#android:color/darker_gray"
android:contentDescription="#string/imgcatchpicture_contentdescription"
android:scaleType="centerInside"
android:src="#android:drawable/ic_menu_camera" />
<Spinner
android:id="#+id/spinnerLocation"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_below="#id/editLongitudeLabel" />
<TextView
android:id="#+id/txtFishHeader"
style="?android:attr/listSeparatorTextViewStyle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_below="#id/spinnerLocation"
android:text="#string/section_fish" />
<Spinner
android:id="#+id/spinnerSpeciesType"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_below="#id/txtFishHeader" />
<EditText
android:id="#+id/editLengthLabel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_below="#id/spinnerSpeciesType"
android:ems="5"
android:hint="#string/hint_length"
android:inputType="numberDecimal" />
<EditText
android:id="#+id/editWeightLabel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_alignParentRight="true"
android:layout_below="#id/spinnerSpeciesType"
android:ems="5"
android:hint="#string/hint_weight"
android:inputType="numberDecimal" />
<EditText
android:id="#+id/editLengthLabel2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_below="#id/editLengthLabel"
android:ems="5"
android:hint="#string/hint_length"
android:inputType="numberDecimal" />
<EditText
android:id="#+id/editWeightLabel2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_alignParentRight="true"
android:layout_below="#id/editWeightLabel"
android:ems="5"
android:hint="#string/hint_weight"
android:inputType="numberDecimal" />
</RelativeLayout>
</ScrollView>
</com.ahappydevelopment.android.fishtales.views.LogEditView>
As you can see, my layout does include a ScrollView. I have even defined the android:theme="#style/DialogTheme" in the layout. I have tried setting android:fillViewport="true" on the ScrollView, as I saw in another StackOverflow posting.
On the Java side of things, I have an override for the onCreateDialog method defined as such:
#NonNull
#Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Dialog dialog = new Dialog(getActivity(), R.style.DialogTheme);
//set to adjust screen height automatically, when soft keyboard appears on screen
dialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
return dialog;
}
The Fragment that initiates the DialogFragment has a method that looks like this:
public void addLogButtonOnClickEvent() {
LogEditFragment addLog = LogEditFragment.get(0l);
if(mIsLargeLayout) {
// The device is using a large layout, so show the fragment as a dialog
addLog.show(getFragmentManager(), "AddLog");
} else {
// The device is smaller, so show the fragment fullscreen
FragmentTransaction transaction = getFragmentManager().beginTransaction();
// For a little polish, specify a transition animation
transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
// To make it fullscreen, use the 'content' root view as the container
// for the fragment, which is always the root view for the activity
transaction.add(android.R.id.content, addLog).addToBackStack(null).commit();
}
}
As I said, this is working fine for the KitKat emulator. This is NOT working for the Lollipop emulator. You can see that I am trying very hard to get the DialogFragment to do adjust resize. :-) Does anyone see what I am missing or doing wrong? Also, if there is code that I have neglected to include that would help to find a solution, the please let me know, and I will post that as well. Thank you for any insight you can provide.
It took a while before I discovered this answer. I had actually refactored my DialogFragment to be an AppCompatActivity. I then began to think that perhaps the Navigation Drawer set up for Android Lollipop was perhaps to blame for the problems I was experiencing with the DialogFragment. My MainActivity layout file for API level 21 and above uses a DrawerLayout widget with a ScrimInsetsFrameLayout for the Navigation Drawer view. So, both the DrawerLayout and the ScrimInsetsFrameLayout utilize android:fitsSystemWindows="true" in their definition as part of achieving the Material Design UI specification for a Navigation Drawer. That android:fitsSystemWindows="true" in the DrawerLayout definition was interfering with the android:windowSoftInputMode="stateHidden|adjustResize" defined for the MainActivity in the AndroidManifest.xml file to cause the dialog to adjust and resize when the soft keyboard is launched. Here is the XML layout of the MainActivity:
<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="#+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
tools:context=".MainActivity">
<!-- The Main Content View -->
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<include
android:id="#+id/app_bar"
layout="#layout/app_bar_main" />
<FrameLayout
android:id="#+id/fragment_main_container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="#id/app_bar" />
</RelativeLayout>
<!-- The Navigation Drawer View -->
<com.ahappydevelopment.android.fishtales.widgets.ScrimInsetsFrameLayout
android:id="#+id/scrimInsetsFrameLayout"
android:layout_width="#dimen/navigation_drawer_width"
android:layout_height="match_parent"
android:layout_gravity="start"
android:elevation="10dp"
android:fitsSystemWindows="true"
app:insetForeground="#4000">
<FrameLayout
android:id="#+id/fragment_drawer_container"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</com.ahappydevelopment.android.fishtales.widgets.ScrimInsetsFrameLayout>
</android.support.v4.widget.DrawerLayout>
When telling the FragmentManager to add the DialogFragment, I was using the android.R.id.content as the view container, which is prescribed by the documentation. By experimenting with which view container to use, I was able to find one that gave the expected results. In my case, it is the DrawerLayout view defined in the MainActivity layout file.
LogEditFragment addLog = LogEditFragment.get(0l);
if(mIsLargeLayout) {
// The device is using a large layout, so show the fragment as a dialog
addLog.show(getFragmentManager(), "AddLog");
} else {
// The device is smaller, so show the fragment fullscreen
FragmentTransaction transaction = getFragmentManager().beginTransaction();
// For a little polish, specify a transition animation
transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
// To make it fullscreen, use the 'drawer_layout' view
// as the container for the fragment
transaction.add(R.id.drawer_layout, addLog).addToBackStack(null).commit();
}
Once I had made these changes and refactored my LogEditFragment class to once again extend DialogFragment, both the dialog and the navigation drawer behaved as expected.
I have the following layout XML file:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:layout_gravity="center"> // The layout_gravity doesn't seem to affect
// the button Views
// (I guess this is the wrong way to do it)
<Button
android:id="#+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Genre1" />
<Button
android:id="#+id/button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Genre2"
/>
</LinearLayout>
How do I make a single general attribute configuration e.g. android:layout_gravity="center" for all my Button Views?
You could wrap common attributes for a certain View under a style.
Create a styles.xml file in your values folder, and just declare the styles:
<style name="list_item_title">
<item name="android:textStyle">bold</item>
<item name="android:textColor">#android:color/black</item>
<item name="android:textSize">18sp</item>
<item name="android:padding">0dp</item>
</style>
Then, on your TextView (or Button, or whatever View...):
<TextView
android:id="#+id/tv1"
style="#style/list_item_title" />
Write below line
android:gravity="center"
instead of
android:layout_gravity="center"
it will solve your problem.
have you tried android:gravity="center" instead of android:layout_gravity="center"
or you can try android:layout_gravity="center" in your buttons xml