Android-панель нижнего меню - PullRequest
1 голос
/ 19 мая 2011

Я хочу иметь общую нижнюю строку меню для всех приложений на каждой странице. Я разработал нижнюю панель, но меня смущает событие onClick значков меню. должен ли я написать код для слушателя onClick для каждого класса активности, чтобы панель была видимой и работала на каждой странице, или если есть какой-либо другой способ, я могу создать общую нижнюю панель, которая находится на каждой странице, без написания кода меню на каждом класс деятельности.

Я пытался создать с помощью создания базового класса и расширения его в других дочерних классах, как заявлено dave.c в посте Android, создающем Bottom Bar Menu , но у меня это не сработало. Пожалуйста, предложите. Спасибо.

1 Ответ

2 голосов
/ 19 мая 2011

Простой пример (как предложил dave.c):

public class BaseActivity extends Activity {

    public void onClickButton1(View view) {
            Toast toast = Toast.makeText(this, "Button 1 clicked", Toast.LENGTH_SHORT);
            toast.show();
    }

    public void onClickButton2(View view) {
            Intent i = new Intent(this, MyFirstActivity.class);
            startActivity(i);
    }

    public void onClickButton3(View view) {
            Intent i = new Intent(this, MySecondActivity.class);
            startActivity(i);
    }
}

Ваша активность MyFirstActivity будет выглядеть следующим образом:

public class MyFirstActivity extends BaseActivity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.my_first_activity);
    }
}

Ваша активность MySecondActivity:

public class MySecondActivity extends BaseActivity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.my_second_activity);
    }
}

В макете my_first_activity.xml вы включаете:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">    
    <TextView android:text="My first activity" android:layout_width="wrap_content"
         android:layout_height="wrap_content"/>
    <include android:layout_width="fill_parent" android:layout_height="wrap_content" 
         layout="@layout/bottom_bar" />
</LinearLayout>

В my_second_activity.xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <TextView android:text="My second activity" android:layout_width="wrap_content" 
        android:layout_height="wrap_content"/>
    <include android:layout_width="fill_parent" android:layout_height="wrap_content" 
        layout="@layout/bottom_bar" />
</LinearLayout>

В bottom_bar вы определяете кнопки с обработчиками onClick:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
    <Button android:text="Button1" android:id="@+id/button1" android:layout_width="wrap_content" 
        android:layout_height="wrap_content" android:onClick="onClickButton1"/>
    <Button android:text="Button2" android:id="@+id/button2" android:layout_width="wrap_content" 
        android:layout_height="wrap_content" android:onClick="onClickButton2"/>
    <Button android:text="Button3" android:id="@+id/button3" android:layout_width="wrap_content" 
        android:layout_height="wrap_content" android:onClick="onClickButton3"/>
</LinearLayout>

Youможет столкнуться с проблемами при использовании этого дизайна.Например, если вы хотите использовать ListView в некоторых ваших действиях и хотите создать подкласс ListActivity (еще один пример - TabActivity), это будет невозможно.

Другой способ заключается в создании подкласса Activity и определении одного общего обработчика, который обрабатываетСобытия onClick.В этом случае вам нужно будет определить обработчики onClick в каждом действии и вызвать соответствующие методы общего обработчика.

Еще один способ - использовать TabHost и TabActivity.

...