![](/img/trans.png)
[英]How can I implement custom Action Bar with custom buttons in Android?
[英]Android custom action bar with action buttons
這是我要創建的操作欄。
這是我放入菜單中的項目。
<item
android:id="@+id/search"
android:title="Search"
android:showAsAction="ifRoom|collapseActionView"
android:actionLayout="@layout/search_layout"
/>
<item
android:id="@+id/search1"
android:title="PHOTO"
android:showAsAction="ifRoom"
android:actionLayout="@layout/search_layout"
/>
crashActionView-啟動時折疊搜索菜單。
單擊搜索項后,它會顯示如圖1所示的編輯文本。但我需要始終看到它,不僅是單擊后。
如果我將其設置為Always(始終),由於fill_parent,它將從屏幕上彈出菜單項。
<EditText
android:id="@+id/txt_search"
android:inputType="text"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
沒有菜單項,是否可以獲得標題欄布局的寬度? 在這種情況下,我可以將固定寬度設置為edittext項。
還有其他方法可以使它起作用嗎? 結果,它必須是自定義標題布局+菜單項。 此自定義布局必須填充菜單項和圖標之間的空白區域。
您可以通過設置自定義視圖代替操作欄標題來實現。
ActionBar actionBar = getActionBar();
actionBar.setCustomView(R.layout.search_layout);
actionBar.setDisplayShowCustomEnabled(true);
結果是一個EditText
,它填充了動作欄的整個寬度,但動作按鈕除外。 它看起來就像問題中的第一張圖片。
使用Custom ActionBar ,可以解決您的問題。 對於自定義ActionBar,您必須按照以下步驟在“自定義布局”上創建:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:enabled="false"
android:orientation="horizontal"
android:layout_alignParentRight="true"
android:layout_gravity="right"
android:paddingEnd="8dip"
android:paddingRight="8dip"
android:paddingLeft="8dip">
<EditText
android:layout_width="200dip"
android:layout_height="wrap_content"
android:id="@+id/action_bar_edt_search"/>
<ImageButton
android:layout_width="50dip"
android:layout_height="50dip"
android:id="@+id/action_bar_img_search"
android:background="@drawable/search_ico"/>
<Button
android:id="@+id/action_bar_search"
android:layout_alignParentRight="true"
android:layout_gravity="right"
style="@style/ActionBarButtonWhite" />
<Button
android:id="@+id/action_bar_photo"
android:layout_alignParentRight="true"
android:layout_gravity="right"
style="@style/ActionBarButtonOffWhite" />
<Button
android:id="@+id/action_bar_video"
android:layout_alignParentRight="true"
android:layout_gravity="right"
style="@style/ActionBarButtonOffWhite" />
<Button
android:id="@+id/action_bar_mobile"
android:layout_alignParentRight="true"
android:layout_gravity="right"
style="@style/ActionBarButtonOffWhite" />
color.xml
<resources>
<color name="action_bar">#ff0d0d0d</color>
<color name="white">#ffffffff</color>
<color name="off_white">#99ffffff</color>
</resources>
styles.xml
<style name="MyActionButtonStyle" parent="android:Widget.ActionButton">
<item name="android:minWidth">28dip</item>
</style>
<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>
現在,您需要按照以下步驟在Java文件中創建ViewGroup和ActionBar :
final ViewGroup actionBarLayout = (ViewGroup) getLayoutInflater().inflate(
R.layout.actions,
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 EditText actionBarEditSearch = (EditText) findViewById(R.id.action_bar_edt_search);
actionBarEditSearch.setVisibility(View.GONE);
final ImageButton actionBarImgSearch = (ImageButton) findViewById(R.id.action_bar_img_search);
actionBarImgSearch.setVisibility(View.GONE);
final Button actionBarSearch = (Button) findViewById(R.id.action_bar_search);
actionBarSearch.setText("SEARCH");
final Button actionBarPhoto = (Button) findViewById(R.id.action_bar_photo);
actionBarPhoto.setText("PHOTO");
final Button actionBarVideo = (Button) findViewById(R.id.action_bar_video);
actionBarVideo.setText("VIDEO");
final Button actionBarMobile = (Button) findViewById(R.id.action_bar_mobile);
actionBarMobile.setText("MOBILE");
actionBarSearch.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
actionBarEditSearch.setVisibility(View.VISIBLE);
actionBarImgSearch.setVisibility(View.VISIBLE);
actionBarSearch.setVisibility(View.GONE);
}
});
actionBarImgSearch.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
actionBarEditSearch.setVisibility(View.GONE);
actionBarImgSearch.setVisibility(View.GONE);
actionBarSearch.setVisibility(View.VISIBLE);
}
});
<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>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.