web-dev-qa-db-ja.com

ICSでアクションバーを最下部に強制するにはどうすればよいですか?

アイスクリームサンドイッチ(Android 4.0)には、Action Bar電話の画面の下部にあります。これは私のアプリケーションで使用したいものです。 docs 言及uiOptions="splitActionBarWhenNarrow"何かが必要なとき、つまりタブを上部に、Action Bar下部のショートカット。ドキュメントに記載されているように、アプリケーションマニフェストに行を追加しようとしましたが、今のところ機能していません。

以下に例を示します。

enter image description here

また、ICSを実行しているGalaxy Nexusで、メッセージングアプリケーションにAction Bar下部と上部のタイトル以外は何もないので、何らかの方法でAction Barが一番下になります。

何か案は?

42
Michell Bak

ドキュメントに記載されているように、アプリケーションマニフェストに行を追加しようとしましたが、今のところ機能していません。

このサンプルプロジェクト で機能しました。マニフェストは次のとおりです。

<?xml version="1.0" encoding="utf-8"?>
<manifest package="com.commonsware.Android.actionbarbc"
          xmlns:Android="http://schemas.Android.com/apk/res/Android">

  <application Android:hardwareAccelerated="true"
               Android:icon="@drawable/cw"
               Android:label="@string/app_name">
    <activity Android:label="@string/app_name"
              Android:name=".InflationDemo"
              Android:uiOptions="splitActionBarWhenNarrow">
      <intent-filter>
        <action Android:name="Android.intent.action.MAIN" />
        <category Android:name="Android.intent.category.LAUNCHER" />
      </intent-filter>
    </activity>
  </application>
  <uses-sdk Android:minSdkVersion="4"
            Android:targetSdkVersion="11" />
  <supports-screens Android:anyDensity="true"
                    Android:largeScreens="true"
                    Android:normalScreens="true"
                    Android:smallScreens="true"
                    Android:xlargeScreens="true" />
</manifest>

また、ICSを実行するGalaxy Nexusでは、メッセージングアプリケーションの下部にアクションバーがあり、上部にタイトルしかありません。そのため、アクションバーを強制的に下部に配置できる必要があります。

会話リストを参照している場合は、ActionBarと次のセットアップコードを使用して、上部と下部にあるsplitActionBarWhenNarrowです。

private void setupActionBar() {
    ActionBar actionBar = getActionBar();

    ViewGroup v = (ViewGroup)LayoutInflater.from(this)
        .inflate(R.layout.conversation_list_actionbar, null);
    actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM,
            ActionBar.DISPLAY_SHOW_CUSTOM);
    actionBar.setCustomView(v,
            new ActionBar.LayoutParams(ActionBar.LayoutParams.WRAP_CONTENT,
                    ActionBar.LayoutParams.WRAP_CONTENT,
                    Gravity.CENTER_VERTICAL | Gravity.RIGHT));

    mUnreadConvCount = (TextView)v.findViewById(R.id.unread_conv_count);
}
28
CommonsWare

ActionBarSherlockを使用していますが、同様の問題がありました。 Android:uiOptions="splitActionBarWhenNarrow" 以内 <activity>タグではなく、<application>タグ。

たとえば、これはうまくいきました:

<activity Android:name=".my.Activity" 
          Android:uiOptions="splitActionBarWhenNarrow"/>

これは機能しませんでした:

<manifest xmlns:Android="http://schemas.Android.com/apk/res/Android"
          package="com.slowchop.etc"
          Android:uiOptions="splitActionBarWhenNarrow">
12
gak

ここで編集するのは画像です:)。 InstaGram ActionBar + Bottom Bar

再び最高の結果で:)。最初に行う必要があるのは、header.xmlというレイアウト名を作成することです

_<?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="@dimen/action_bar_height"
    Android:layout_gravity="top"
    Android:baselineAligned="true"
    Android:orientation="horizontal" >

    <ImageView
        Android:id="@+id/share"
        Android:layout_width="0dp"
        Android:layout_height="wrap_content"
        Android:layout_gravity="start"
        Android:layout_weight=".14"
        Android:background="@drawable/action_bar_left_button"
        Android:src="@drawable/action_bar_glyph_back" />

    <ImageView
        Android:id="@+id/bright"
        Android:layout_width="0dp"
        Android:layout_height="wrap_content"
        Android:layout_weight=".14"
        Android:background="@drawable/action_bar_left_button"
        Android:src="@drawable/action_bar_glyph_Lux" />

    <ImageView
        Android:id="@+id/rotate"
        Android:layout_width="0dp"
        Android:layout_height="wrap_content"
        Android:layout_weight=".14"
        Android:background="@drawable/action_bar_left_button"
        Android:src="@drawable/rotate" />

    <ImageView
        Android:id="@+id/bright"
        Android:layout_width="0dp"
        Android:layout_height="wrap_content"
        Android:layout_weight=".14"
        Android:background="@drawable/action_bar_left_button"
        Android:src="@drawable/action_bar_glyph_Lux" />

    <ImageView
        Android:id="@+id/rotate"
        Android:layout_width="0dp"
        Android:layout_height="wrap_content"
        Android:layout_weight=".14"
        Android:background="@drawable/action_bar_left_button"
        Android:src="@drawable/rotate" />

    <ImageView
        Android:id="@+id/forwa"
        Android:layout_width="0dp"
        Android:layout_height="wrap_content"
        Android:layout_weight=".14"
        Android:background="@drawable/action_bar_left_button"
        Android:src="@drawable/forward" />

</LinearLayout>
_

その後、MainActivity.classに移動してこのメ​​ソッドを作成します。

_    private void setupActionBar() {
    ActionBar actionBar = getActionBar();
    //actionBar.setDisplayShowHomeEnabled(false);
    actionBar.setDisplayShowTitleEnabled(false);
    ViewGroup v = (ViewGroup)LayoutInflater.from(this)
        .inflate(R.layout.header, null);
    actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM,
            ActionBar.DISPLAY_SHOW_CUSTOM);
    actionBar.setCustomView(v,
            new ActionBar.LayoutParams(ActionBar.LayoutParams.MATCH_PARENT,
                    ActionBar.LayoutParams.WRAP_CONTENT,
                    Gravity.CENTER_VERTICAL | Gravity.RIGHT));

} 
_

onCreateアクティビティにsetupActionBar();を追加して、アプリを実行します:)。

仕切りと画像P.Sを含むカスタムActionBarができました。仕切りはレイアウトで画像の背景として定義されています:)。

4
k0sh

タブレットで一番下に留まることを強制することはできませんが、電話があれば、マニフェストを通してそれを行うことができます。ただし、下のバーと上のバーに似たことができます。この例では、Android ActionBar。を使用する必要なしに簡単にマージを行う方法を示します。

最初に作成する必要があるのは、main_activity.xmlです。私の場合、main_activity.xmlにはRelativeLayoutのImageViewのみが含まれます。ここにコードがあります。

<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:tools="http://schemas.Android.com/tools"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
tools:context=".MainActivity" >
        <RelativeLayout Android:id="@+id/RelativeLayout04"
    Android:layout_width="match_parent" Android:layout_height="wrap_content"
    Android:layout_alignParentTop="true">

    <include layout="@layout/header" />

</RelativeLayout>

<ImageView
    Android:id="@+id/view"
    Android:layout_width="match_parent"
    Android:layout_height="200dp"
    Android:layout_above="@+id/RelativeLayout03"
    Android:layout_below="@+id/RelativeLayout04"
    Android:layout_centerHorizontal="true"
    Android:src="@Android:drawable/alert_dark_frame" />

    <RelativeLayout Android:id="@+id/RelativeLayout03"
    Android:layout_width="match_parent" Android:layout_height="wrap_content"
    Android:layout_alignParentBottom="true">

    <include layout="@layout/tryit" />

</RelativeLayout>

上記のコードを見るとわかるように、main_activity.xmlの中に2つのマージがあり、1つは下で定義され、もう1つは上で定義されています。これが偽のボトムバーxmlです。

<merge xmlns:Android="http://schemas.Android.com/apk/res/Android">

<LinearLayout
    Android:id="@+id/LinearLayout01"
    Android:layout_width="match_parent"
    Android:layout_height="80dp"
     Android:layout_weight="0.14"
    Android:background="@drawable/dock" >

    <ImageView
        Android:id="@+id/dark"
        Android:layout_width="wrap_content"
        Android:layout_height="match_parent"
        Android:layout_weight="0.14" />

    <ImageView
        Android:id="@+id/stock"
        Android:layout_width="wrap_content"
        Android:layout_height="match_parent"
        Android:layout_weight="0.14" />

    <ImageView
        Android:id="@+id/open"
        Android:layout_width="wrap_content"
        Android:layout_height="match_parent"
        Android:layout_weight="0.14" />

    <ImageView
        Android:id="@+id/border"
        Android:layout_width="wrap_content"
        Android:layout_height="match_parent"
        Android:layout_weight="0.15" />

    <ImageView
        Android:id="@+id/color"
        Android:layout_width="wrap_content"
        Android:layout_height="match_parent"
        Android:layout_weight="0.15" 
        />

</LinearLayout>

LinearLayoutに固定の背景を配置し、onClicksのImageViewを偽造しています。

ここがトップバーです。 `

<LinearLayout
    Android:id="@+id/LinearLayout02"
    Android:layout_width="match_parent"
    Android:layout_height="40dp"
     Android:layout_weight="0.14"
    Android:background="@drawable/dock1" 
    Android:layout_gravity="top">

    <ImageView
        Android:id="@+id/darka"
        Android:layout_width="wrap_content"
        Android:layout_height="match_parent"
        Android:layout_weight="0.14" />

    <ImageView
        Android:id="@+id/stocka"
        Android:layout_width="wrap_content"
        Android:layout_height="match_parent"
        Android:layout_weight="0.14" />

    <ImageView
        Android:id="@+id/opena"
        Android:layout_width="wrap_content"
        Android:layout_height="match_parent"
        Android:layout_weight="0.14" />

    <ImageView
        Android:id="@+id/bordera"
        Android:layout_width="wrap_content"
        Android:layout_height="match_parent"
        Android:layout_weight="0.15" />

    <ImageView
        Android:id="@+id/colora"
        Android:layout_width="wrap_content"
        Android:layout_height="match_parent"
        Android:layout_weight="0.15" 
        />

</LinearLayout>

`

また、上の下部のバーからペーストをコピーします。 Android:layout_alignParentBottom="true"からAndroid:layout_alignParentTop="true"に変更するだけで、下部と上部にactionBarが表示されます。この場合、ActionBarを使用する必要はないので、Theme.Holo.NoActionBarを使用することをお勧めします。

そして、これが画像の結果です: http://i.imgur.com/N8uKg6v.png

これは私が現在取り組んでいるプロジェクトです。ほぼすべてを行いましたが、それでも設計に苦労しています。私の答えがあなたに利益をもたらすことを願っています。面白いと思ったら答えを投票してください。
宜しくお願いします。 〜コシュ

3
k0sh

これを試して...

private View contentView;

@Override
protected void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
     contentView = getLayoutInflater().inflate(R.layout.activity_main, null);
     setContentView(contentView);
     LinearLayout layout = (LinearLayout) contentView.getParent().getParent();
     View view = layout.getChildAt(0);
     layout.removeViewAt(0);
     layout.addView(view);
}
0
Gopal Gopi