2

これが私が作成したいアクションバーです。

ここに画像の説明を入力

メニューに入れさせていただいた品々です。

   <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"
    />

collapseActionView - 起動時に検索メニューを折りたたみます。

ここに画像の説明を入力 検索項目をクリックすると、写真 1 のような編集テキストが表示されます。ただし、クリックした後だけでなく、常に表示する必要があります。

Always に設定すると、fill_parent のために画面からメニュー項目がポップされます。

<EditText
        android:id="@+id/txt_search"
        android:inputType="text"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
    />  

メニュー項目なしでタイトル バー レイアウトの幅を取得することは可能ですか? この場合、edittext アイテムに固定幅を設定できます。

それを機能させるための他のアプローチはありますか?結果として、カスタム タイトル レイアウト + メニュー項目である必要があります。このカスタム レイアウトは、メニュー項目とアイコンの間の空白を埋める必要があります。

4

2 に答える 2

3

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>

スタイル.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 ファイルにViewGroupActionBarを作成する必要があります。

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>
于 2014-09-24T05:54:54.033 に答える
2

これは、アクション バーのタイトルの代わりにカスタム ビューを設定することで実現できます。

ActionBar actionBar = getActionBar();
actionBar.setCustomView(R.layout.search_layout);
actionBar.setDisplayShowCustomEnabled(true);

結果はEditText、アクション ボタンを除くアクション バーの幅全体を埋める です。質問の最初の画像とまったく同じように見えます。

于 2013-03-08T16:07:22.597 に答える