Android

How can I implement custom Action Bar with custom buttons in Android?

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

Я хочу реализовать пользовательскую ActionBar которая должна выглядеть следующим образом:

введите описание изображения здесь

Итак, вопросы:


  1. Как я могу реализовать кнопку типа пользовательский вид: просто какое-то изображение?

  2. Как я могу нарисовать линию в верхней частиActionBar?

  3. И как я могу реализовать кнопки без разделительных строк: добавить вкладки на ActionBar или что?

Переведено автоматически
Ответ 1

введите описание изображения здесь

Это практически все, что вы получите, если захотите использовать ActionBar API. Я не уверен, что вы можете разместить цветную полоску над ActionBar без каких-либо странных Window взломов, это не стоит того. Что касается изменения MenuItems, вы можете сделать их более жесткими с помощью стиля. Это было бы что-то вроде этого, но я это не тестировал.

<style name="MyTheme" parent="android:Theme.Holo.Light">
<item name="actionButtonStyle">@style/MyActionButtonStyle</item>
</style>

<style name="MyActionButtonStyle" parent="Widget.ActionButton">
<item name="android:minWidth">28dip</item>
</style>

Вот как раздуть и добавить пользовательский макет в ваш ActionBar.

    // Inflate your custom layout
final ViewGroup actionBarLayout = (ViewGroup) getLayoutInflater().inflate(
R.layout.action_bar,
null);

// Set up your ActionBar
final ActionBar actionBar = getActionBar();
actionBar.setDisplayShowHomeEnabled(false);
actionBar.setDisplayShowTitleEnabled(false);
actionBar.setDisplayShowCustomEnabled(true);
actionBar.setCustomView(actionBarLayout);

// You customization
final int actionBarColor = getResources().getColor(R.color.action_bar);
actionBar.setBackgroundDrawable(new ColorDrawable(actionBarColor));

final Button actionBarTitle = (Button) findViewById(R.id.action_bar_title);
actionBarTitle.setText("Index(2)");

final Button actionBarSent = (Button) findViewById(R.id.action_bar_sent);
actionBarSent.setText("Sent");

final Button actionBarStaff = (Button) findViewById(R.id.action_bar_staff);
actionBarStaff.setText("Staff");

final Button actionBarLocations = (Button) findViewById(R.id.action_bar_locations);
actionBarLocations.setText("HIPPA Locations");

Вот пользовательский макет:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:enabled="false"
android:orientation="horizontal"
android:paddingEnd="8dip" >

<Button
android:id="@+id/action_bar_title"
style="@style/ActionBarButtonWhite" />

<Button
android:id="@+id/action_bar_sent"
style="@style/ActionBarButtonOffWhite" />

<Button
android:id="@+id/action_bar_staff"
style="@style/ActionBarButtonOffWhite" />

<Button
android:id="@+id/action_bar_locations"
style="@style/ActionBarButtonOffWhite" />

</LinearLayout>

Вот макет цветной полосы: чтобы использовать его, просто используйте merge в любом макете, который вы раздуваете setContentView.

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="@dimen/colorstrip"
android:background="@android:color/holo_blue_dark" />

Вот Button стили:

<style name="ActionBarButton">
<item name="android:layout_width">wrap_content</item>
<item name="android:layout_height">wrap_content</item>
<item name="android:background">@null</item>
<item name="android:ellipsize">end</item>
<item name="android:singleLine">true</item>
<item name="android:textSize">@dimen/text_size_small</item>
</style>

<style name="ActionBarButtonWhite" parent="@style/ActionBarButton">
<item name="android:textColor">@color/white</item>
</style>

<style name="ActionBarButtonOffWhite" parent="@style/ActionBarButton">
<item name="android:textColor">@color/off_white</item>
</style>

Вот цвета и размеры, которые я использовал:

<color name="action_bar">#ff0d0d0d</color>
<color name="white">#ffffffff</color>
<color name="off_white">#99ffffff</color>

<!-- Text sizes -->
<dimen name="text_size_small">14.0sp</dimen>
<dimen name="text_size_medium">16.0sp</dimen>

<!-- ActionBar color strip -->
<dimen name="colorstrip">5dp</dimen>

Если вы хотите настроить ее больше, чем это, вы можете вообще отказаться от использования ActionBar, но я бы не рекомендовал этого. Вы также можете ознакомиться с Рекомендациями по дизайну Android, чтобы получить лучшее представление о том, как создавать свой ActionBar.

Если вы решите отказаться от ActionBar и вместо этого использовать свой собственный макет, вам следует обязательно добавить возможность действий Toasts при длительном нажатии пользователями ваших "MenuItems". Этого можно легко достичь, используя эту суть.

Ответ 2

1 Вы можете использовать

<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/menu_item1"
android:icon="@drawable/my_item_drawable"
android:title="@string/menu_item1"
android:showAsAction="ifRoom" />
</menu>

2 Создайте стиль для панели действий и используйте пользовательский фон:

<resources>
<!-- the theme applied to the application or activity -->
<style name="CustomActivityTheme" parent="@android:style/Theme.Holo">
<item name="android:actionBarStyle">@style/MyActionBar</item>
<!-- other activity and action bar styles here -->
</style>
<!-- style for the action bar backgrounds -->
<style name="MyActionBar" parent="@android:style/Widget.Holo.ActionBar">
<item name="android:background">@drawable/background</item>
<item name="android:backgroundStacked">@drawable/background</item>
<item name="android:backgroundSplit">@drawable/split_background</item>
</style>
</resources>

снова 3 стиля Android: actionbardidivider

Для этого очень полезна документация по Android.

Ответ 3

Напишите следующий код в menu.xml файл:

<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:my_menu_tutorial_app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
tools:context="com.example.mymenus.menu_app.MainActivity">
<item android:id="@+id/item_one"
android:icon="@drawable/menu_icon"
android:orderInCategory="l01"
android:title="Item One"
my_menu_tutorial_app:showAsAction="always">
<!--sub-menu-->
<menu>
<item android:id="@+id/sub_one"
android:title="Sub-menu item one" />
<item android:id="@+id/sub_two"
android:title="Sub-menu item two" />
</menu>

Также запишите этот java-код в файл класса активности:

public boolean onOptionsItemSelected(MenuItem item)
{
super.onOptionsItemSelected(item);
Toast.makeText(this, "Menus item selected: " +
item.getTitle(), Toast.LENGTH_SHORT).show();
switch (item.getItemId())
{
case R.id.sub_one:
isItemOneSelected = true;
supportInvalidateOptionsMenu();
return true;
case MENU_ITEM + 1:
isRemoveItem = true;
supportInvalidateOptionsMenu();
return true;
default:
return false;
}
}

Это самый простой способ отображения меню в панели действий.

java android android-actionbar