Как установить две пользовательские кнопки в левой и правой частях андроида? - программирование

Как установить две пользовательские кнопки в левой и правой частях андроида?

Я использую библиотеку Шерлока, и я также реализую с собой. Моя проблема в том, что я добавил два пункта в меню, теперь я хочу 1 элемент слева от панели действий и второй справа от панели действий. Как к этому?

4b9b3361

Ответ 1

Вы можете создать такую ​​панель действий, но это немного сложнее, чем раздувание меню. Меню, созданное в методе onCreateOptionsMenu(), всегда выравнивается вправо, помещается в панель действий разделения или скрывается под клавишей меню.

Если вы хотите, чтобы ваша панель действий содержала только два элемента меню: один на левом краю, а другой на правом краю - вам нужно создать пользовательский вид в панели действий.

Пользовательский макет представления будет примерно таким:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
                android:layout_width="fill_parent"
                android:layout_height="fill_parent">
    <ImageButton android:src="@drawable/ic_menu_item1"
                 android:background="?attr/actionBarItemBackground"
                 android:layout_width="?attr/actionBarSize"
                 android:layout_height="match_parent"
                 android:scaleType="centerInside"
                 android:id="@+id/item1"
                 android:layout_alignParentLeft="true"
                 android:layout_alignParentTop="true"/>

    <ImageButton android:src="@drawable/ic_menu_item2"
                 android:background="?attr/actionBarItemBackground"
                 android:layout_width="?attr/actionBarSize"
                 android:layout_height="match_parent"
                 android:scaleType="centerInside"
                 android:id="@+id/item2"
                 android:layout_alignParentRight="true"
                 android:layout_alignParentTop="true"/>
</RelativeLayout>

Определите в теме, которую хотите использовать пользовательский вид. Тема должна содержать:

<style name="MyTheme" parent="@style/Theme.Sherlock">
    <item name="actionBarStyle">@style/MyActionBarStyle</item>
    <item name="android:actionBarStyle">@style/MyActionBarStyle</item>
</style>

<style name="MyActionBarStyle" parent="@style/Widget.Sherlock.ActionBar">
    <item name="displayOptions">showCustom</item>
    <item name="android:displayOptions">showCustom</item>
</style>

Установите пользовательский вид в активности (или фрагменте):

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    ActionBar ab = getSherlock().getActionBar();
    LayoutInflater li = LayoutInflater.from(this);
    View customView = li.inflate(R.layout.my_custom_view, null);
    ab.setCustomView(customView);

    ImageButton ibItem1 = (ImageButton) customView.findViewById(R.id.item1);
    ibItem1.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            // ...
        }
    });

    ImageButton ibItem2 = (ImageButton) customView.findViewById(R.id.item2);
    ibItem2.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            // ...
        }
    });
}

Вы должны добавить слушателей кликов для пунктов меню. Вы не можете использовать onOptionsItemSelected() в этом случае.

Ответ 2

Дополнительно к Ответу Томика. Вам нужно добавить

ab.setDisplayShowCustomEnabled(true);

в методе onCreate, иначе пользовательский вид не появится (по крайней мере для меня).