Как заставить панель действий быть внизу в ICS?
Ice Cream Sandwich (Android 4.0) добавляет возможность иметь Action Bar
в нижней части экрана на телефонах и что-то, что я хотел бы иметь в своем приложении. docs упоминает uiOptions="splitActionBarWhenNarrow"
, когда вам нужно что-то, т.е. Вкладки, вверху и Action Bar
ярлыки внизу. Я попытался добавить строку в манифест приложения, как описано в документах, но пока не работает.
Вот пример:
![enter image description here]()
Кроме того, я заметил, что на моем Galaxy Nexus, который запускает ICS, приложение для обмена сообщениями имеет Action Bar
нижний и ничего, кроме заголовка сверху, поэтому должно быть возможно каким-то образом заставить Action Bar
быть внизу.
Любые идеи?
Ответы
Ответ 1
Я попытался добавить строку в манифест приложения, как описано в документах, но пока не работает.
Он работал у меня в этом примере проекта. Вот манифест:
<?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>
Кроме того, я заметил, что на моем Galaxy Nexus, который запускает ICS, приложение для обмена сообщениями имеет панель действий внизу и ничего, кроме заголовка сверху, поэтому должно быть возможно, чтобы каким-то образом заставить панель действий находиться в внизу.
Если вы ссылаетесь на список разговора, то есть 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);
}
Ответ 2
Я использую 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">
Ответ 3
Изменить вот изображение:).
![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));
}
добавьте setupActionBar();
в свою активность onCreate и запустите приложение:).
теперь у вас есть пользовательский ActionBar с разделителями и изображениями P.S делитель определяется в макете как фон изображения:).
Ответ 4
ну, вы не можете заставить остановиться внизу на планшетах, но если телефон да, вы можете сделать это через манифест. но вы можете сделать что-то похоже на нижнюю панель и верхнюю панель.
в этом примере я покажу вам, как использовать слияние, чтобы сделать это легко, без необходимости использования Android-андроида.
Первое, что вам нужно создать, это ваш main_activity.xml
, в моем случае main_activity.xml
содержит только ImageView
в RelativeLayout. вот код.
<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
, определенного внизу, и один, определенный в верхней части.
вот фальшивый нижний бит 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
и подделываю ImageView for onClicks.
и вот верхний бар. `
<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
Это проект, над которым я сейчас работаю. сделал почти все, но все еще борется с дизайном. надеюсь, что мой ответ принесет пользу. пожалуйста, проголосуйте за ответ, если вы считаете это интересным.
с наилучшими пожеланиями. ~ Кош
Ответ 5
попробуйте это...
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);
}