3

Я пытаюсь сделать разделенное меню (с sherlock или без), и я все еще не смог.Как сделать пользовательское разделение (внизу) меню в android

public class MainActivity extends SherlockFragmentActivity { 
ActionBarSherlock mSherlock = ActionBarSherlock.wrap(this); 
............... 
    mSherlock.setUiOptions(ActivityInfo.UIOPTION_SPLIT_ACTION_BAR_WHEN_NARROW); 
    mSherlock.setContentView(R.layout.activity_main); 
............... 
@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    //Used to put dark icons on light action bar 
    boolean isLight = false; 

    menu.add("You") 
     .setTitle("You") 
     .setIcon(isLight ? R.drawable.icon_you : R.drawable.icon_you) 
     .setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS | MenuItem.SHOW_AS_ACTION_WITH_TEXT); 

    menu.add("Pet Open") 
     .setIcon(isLight ? R.drawable.icon_pet_open : R.drawable.icon_pet_open) 
     .setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS | MenuItem.SHOW_AS_ACTION_WITH_TEXT); 

    menu.add("Around") 
     .setIcon(isLight ? R.drawable.icon_around : R.drawable.icon_around) 
     .setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS | MenuItem.SHOW_AS_ACTION_WITH_TEXT); 

    return true; 
} 

в результате я получаю 3 маленькие иконки без названия и фона по умолчанию, который я не знаю, как изменить. и вот что я хочу получить:

Split Menu Bottom

Как добавить пользовательский нижнее меню, не влияя на верхнее меню?

вот что я нашел:

implement split menu from manifest (я не думаю, что это дало бы мне возможность изменить что-нибудь я хочу)

using layout params - это выглядит, как он не работает должным образом.

Что было бы лучшим способом реализовать это меню?


UPDATE here is one more way i found: хорошая вещь, что я могу видеть, как изменить его, но плохо, что он использует тот же фон на верхнем & дне, и я не уверен, если я могу изменить его. enter image description here

+1

Я думаю, что приведенный вами пример не сильно отличается от исходного кода. Он использует 'ActionItem', как обычно, он просто устанавливает« ActionBar »для наложения экрана таким образом, чтобы он был прозрачным. Я ничего не вижу в коде, который бы более легко разрешил вам стиль вашего меню. – Jon

ответ

1

2 варианта:

1) Вы можете просто установить флаг в манифесте (или программно, как вы выше), чтобы разделить ActionBar, но это работает только, если вы находитесь на устройство размером телефонов портрет, и даже тогда у него все еще есть верхняя часть ActionBar, но перемещает первые несколько ActionItem s на дно. Это было бы хорошо для большинства ситуаций, но похоже, что вы говорите, что ВСЕГДА хотите, чтобы это дно отображалось, и системное меню, которое вы использовали бы, не имело бы способности к стилю в той степени, в которой вы хотите.

2) Сделайте свой собственный макет для нижней части экрана, чтобы создать меню стилей, о котором вы говорите. Это может сработать:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" > 

<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_alignParentTop="true" 
    android:orientation="vertical" > 

    <!-- this is where the Activity contents go --> 
</LinearLayout> 

<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="40dp" 
    android:layout_alignParentBottom="true" 
    android:background="#8f8" 
    android:orientation="horizontal" > 

    <!-- this is the green bottom bar --> 
</LinearLayout> 

<LinearLayout 
    android:layout_width="48dp" 
    android:layout_height="70dp" 
    android:layout_alignParentBottom="true" 
    android:layout_alignParentleft="true" 
    android:layout_margin="5dp" 
    android:orientation="vertical" > 

    <!-- This is the status button --> 

    <ImageView 
     android:layout_width="48dp" 
     android:layout_height="40dp" 
     android:background="#00f" /> 

    <TextView 
     android:layout_width="48dp" 
     android:layout_height="wrap_content" 
     android:padding="4dp" 
     android:text="Status" 
     android:textAlignment="center" 
     android:textSize="12sp" /> 
</LinearLayout> 

<LinearLayout 
    android:layout_width="60dp" 
    android:layout_height="70dp" 
    android:layout_alignParentBottom="true" 
    android:layout_centerHorizontal="true" 
    android:layout_margin="5dp" 
    android:orientation="vertical" > 

    <!-- This is the Pet Open button --> 


    <ImageView 
     android:layout_width="60dp" 
     android:layout_height="40dp" 
     android:background="#00f" /> 

    <TextView 
     android:layout_width="60dp" 
     android:layout_height="wrap_content" 
     android:padding="4dp" 
     android:text="Pet Open" 
     android:textAlignment="center" 
     android:textSize="12sp" /> 
</LinearLayout> 

<LinearLayout 
    android:layout_width="60dp" 
    android:layout_height="70dp" 
    android:layout_alignParentBottom="true" 
    android:layout_alignParentRight="true" 
    android:layout_margin="5dp" 
    android:orientation="vertical" > 


    <!-- This is the Refresh button --> 

    <ImageView 
     android:layout_width="60dp" 
     android:layout_height="40dp" 
     android:background="#00f" /> 

    <TextView 
     android:layout_width="60dp" 
     android:layout_height="wrap_content" 
     android:padding="4dp" 
     android:text="Refresh" 
     android:textAlignment="center" 
     android:textSize="12sp" /> 
</LinearLayout> 

</RelativeLayout> 

Это будет работать на 3-х пуговицах, с кучей регулировок, чтобы сделать его стиль ближе к тому, что вы хотите. Если вы хотите, чтобы в нижней части появилось больше 3, и вы хотели использовать предоставленные MenuItem, вы могли бы определить все это во время выполнения в onPrepareOptionsMenu() и динамически изменить версию выше. Это будет намного больше работы, но может быть больше того, что вы ищете.

+0

спасибо. я попробую сейчас. проверьте обновленный вопрос, может быть еще один способ. – FilipLuch

+0

спасибо, я думаю, что я поеду первым путем, потому что на больших экранах нижняя панель будет выглядеть ужасно, также в ландшафтном режиме кнопки идут сверху, что лучше всего, так как будет меньше места, поэтому 3 кнопки в ландшафтном режиме будет слишком много высоты. – FilipLuch

+0

Это похоже на лучший способ пойти.Вообще говоря, «ActionBar» работает хорошо, и имеет достаточно встроенных функций, чтобы сделать его нестандартным решением. – Jon

Смежные вопросы