Sandwich à la crème glacée (Android 4.0) ajoute la possibilité d'avoir le Action Bar
au bas de l'écran sur les téléphones, et c'est quelque chose que j'aimerais avoir dans une de mes applications. Les docs mentionnent uiOptions="splitActionBarWhenNarrow"
pour quand vous voulez quelque chose, c'est-à-dire des onglets, en haut et Action Bar
raccourcis en bas. J'ai essayé d'ajouter la ligne dans le manifeste d'application, comme décrit dans la documentation, mais je ne l'ai pas encore fait fonctionner.
Voici un exemple:
J'ai également remarqué que sur mon Galaxy Nexus, qui exécute ICS, l'application de messagerie a le Action Bar
en bas et rien que le titre en haut, donc il doit être possible de forcer en quelque sorte le Action Bar
être en bas.
Des idées?
J'ai essayé d'ajouter la ligne dans le manifeste d'application, comme décrit dans la documentation, mais je ne l'ai pas encore fait fonctionner.
Cela a fonctionné pour moi dans cet exemple de projet . Voici le manifeste:
<?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>
De plus, j'ai remarqué que sur mon Galaxy Nexus, qui exécute ICS, l'application de messagerie a la barre d'action en bas et rien que le titre en haut, il doit donc être possible de forcer la barre d'action en bas.
Si vous faites référence à la liste de conversations, c'est le ActionBar
en haut et en bas, en utilisant splitActionBarWhenNarrow
et le code d'installation suivant:
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);
}
J'utilise ActionBarSherlock et j'ai eu un problème similaire. Je l'ai résolu en mettant Android:uiOptions="splitActionBarWhenNarrow"
dans le <activity>
tag, plutôt que <application>
tag.
Par exemple, cela a fonctionné:
<activity Android:name=".my.Activity"
Android:uiOptions="splitActionBarWhenNarrow"/>
et cela n'a pas fonctionné:
<manifest xmlns:Android="http://schemas.Android.com/apk/res/Android"
package="com.slowchop.etc"
Android:uiOptions="splitActionBarWhenNarrow">
Modifier voici l'image :).
de retour avec de meilleurs résultats :). la première chose que vous devez faire est de créer un nom de mise en page it 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>
après cela, accédez à votre classe MainActivity.class et créez cette méthode.
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));
}
ajoutez setupActionBar();
à votre activité onCreate et exécutez votre application :).
vous avez maintenant un ActionBar personnalisé avec des séparateurs et des images P.S le diviseur est défini dans la mise en page comme un fond d'image :).
vous ne pouvez pas forcer à rester en bas sur les tablettes, mais si vous téléphonez, vous pouvez le faire via le manifeste. mais vous pouvez faire quelque chose de similaire à la barre inférieure et à la barre supérieure. Dans cet exemple, je vais vous montrer comment utiliser la fusion pour le faire facilement sans avoir besoin d'utiliser Android ActionBar.
la première chose que vous devez créer est votre main_activity.xml
dans mon cas, le main_activity.xml
contient uniquement ImageView
sur RelativeLayout. voici le code.
<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>
comme vous pouvez le voir dans le code ci-dessus, il y a deux fusions que je mets à l'intérieur du main_activity.xml
un défini en bas et un défini en haut. voici la fausse barre inférieure 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>
je mets un arrière-plan fixe au LinearLayout
et simule l'ImageView pour onClicks.
et voici la barre du haut. "
<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>
"
qui copie également la pâte de la barre inférieure ci-dessus. il suffit de changer une chose de Android:layout_alignParentBottom="true"
à Android:layout_alignParentTop="true"
et vous avez obtenu une actionBar en bas et en haut. dans ce cas, vous n'aurez pas besoin d'utiliser l'ActionBar, donc je vous suggère d'utiliser Theme.Holo.NoActionBar
et voici le résultat de l'image: - http://i.imgur.com/N8uKg6v.png
c'est un projet sur lequel je travaille maintenant. fait presque tout, mais toujours aux prises avec le design. j'espère que ma réponse vous sera bénéfique. veuillez voter pour la réponse si vous l'avez trouvée intéressante.
meilleures salutations. ~ Kosh
essaye ça...
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);
}