#android #xml #android-layout #header #footer
#Android #xml #android-layout #заголовок #нижний колонтитул
Вопрос:
Многие популярные приложения, такие как Google Maps, Facebook, Foursquare и т. Д., Имеют панели верхнего и / или нижнего колонтитулов для большинства своих действий. Эти заголовки часто содержат очень полезные кнопки, и я хотел бы создать их для своего приложения. Кто-нибудь знает, как это делается? До сих пор я ничего не смог найти.
Вот несколько фотографий того, что я имею в виду: http://www.flickr.com/photos/calebgomer/6262815430
http://www.flickr.com/photos/calebgomer/6262815458
Ответ №1:
Используя этот способ, вы можете создать свой header-footer xml
и использовать его для любого из ваших activity
, также вам просто нужно написать код для элементов управления в верхнем колонтитуле один раз в HeaderFooter.java и можете получить к нему доступ в своем проекте.
Создайте свой HederFooter.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="fill_parent"
android:layout_height="fill_parent" android:weightSum="10"
android:id="@ id/commonlayout" android:background="#FFFFFF">
<LinearLayout android:id="@ id/llheader"
android:layout_width="fill_parent" android:layout_height="0dp"
android:background="@drawable/bar" android:layout_weight="1">
<RelativeLayout android:id="@ id/relativeLayout1"
android:layout_width="fill_parent" android:layout_height="fill_parent"
android:layout_gravity="center">
<Button
android:id="@ id/Button_HeaderFooterSubscribe"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_marginRight="2dp"
android:layout_centerVertical="true"
android:background="@drawable/subscribe"
/>
<Button
android:id="@ id/Button_logout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_marginRight="2dp"
android:layout_centerVertical="true"
android:background="@drawable/logout"
/>
<Button
android:id="@ id/Button_playlist"
android:layout_marginLeft="2dp"
android:layout_width="wrap_content"
android:layout_centerVertical="true"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:background="@drawable/tempadd"
/>
</RelativeLayout>
</LinearLayout>
<LinearLayout android:id="@ id/lldata"
android:layout_weight="8" android:layout_width="fill_parent"
android:layout_height="0dp" android:background="#FFFFFF">
</LinearLayout>
<LinearLayout android:id="@ id/llfooter"
android:layout_weight="1" android:layout_width="fill_parent"
android:orientation="horizontal" android:layout_height="0dp"
android:visibility="visible" android:background="@drawable/fbg"
android:weightSum="5.0" android:gravity="center"
android:layout_margin="0dp">
<Button android:id="@ id/home" android:layout_height="wrap_content"
android:layout_width="wrap_content" android:layout_weight="1"
android:background="@drawable/home" android:textColor="#FFFFFF"
android:padding="10px"></Button>
<Button android:id="@ id/issue" android:layout_height="wrap_content"
android:layout_width="wrap_content" android:layout_weight="1"
android:background="@drawable/issue" android:textColor="#FFFFFF"
android:padding="10px"></Button>
<Button android:id="@ id/browse" android:layout_height="wrap_content"
android:layout_width="wrap_content" android:layout_weight="1"
android:background="@drawable/browse" android:textColor="#FFFFFF"
android:padding="10px"></Button>
<Button android:id="@ id/search" android:layout_height="wrap_content"
android:layout_width="wrap_content" android:layout_weight="1"
android:background="@drawable/search" android:textColor="#FFFFFF"
android:padding="10px"></Button>
<Button android:layout_height="wrap_content" android:id="@ id/favorite"
android:background="@drawable/favorite" android:layout_width="wrap_content"
android:layout_weight="1"
android:textColor="#FFFFFF" android:padding="10px"></Button>
</LinearLayout>
</LinearLayout>
Затем создайте его HeaderFooter.java Деятельность
public class HeaderFooter extends Activity {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.headerfooter);
}
}
Теперь расширьте вышеуказанное действие на все другие действия и увеличьте свой конкретный вид в средней компоновке headerfooter.xml
public class Home extends HeaderFooter
{
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
ViewGroup vg = (ViewGroup) findViewById(R.id.lldata);
ViewGroup.inflate(Home.this, R.layout.home, vg);
}
}
Комментарии:
1. Этот подход сработал очень хорошо, спасибо! (Единственная проблема заключается в том, что нижний колонтитул имеет очень маленький зазор между ним и нижней частью экрана)
2. @CalebGomer я обновил xml, использую его, и эта проблема будет решена .. скажите мне, если нет
3. @MKJParekh не могли бы вы добавить пример кода о том, как прослушивать нажатия кнопок в заголовке?? и у меня проблема, я не могу расширить действие и увеличить заголовок, ничего не отображается, и я не получаю ошибок, какие-либо предложения? Спасибо
4. Только в операции HeaderFooter вы можете записать событие нажатия кнопки, и оно будет автоматически распространено на другие классы.. В приведенном выше коде мы раздуваем часть данных в xml нижнего колонтитула.. @Moe
5. Это хорошая техника. Но у меня есть одна путаница в отношении вышеуказанного подхода. Мне не нужно добавлять заголовок в мой файл манифеста. Кто-нибудь знает почему?
Ответ №2:
Просто создайте xml, какой вам нужен.
Добавьте эти XML-файлы на другие ваши экраны, используя tag в ваших XML-файлах другого экрана.
Вы можете обрабатывать нажатие кнопки так, как вам нужно в каждом действии.
Надеюсь, это поможет.
Комментарии:
1. Я уже работал на Android раньше. У меня есть работающие приложения, я просто хотел бы, чтобы их графический интерфейс выглядел лучше. Я посмотрю на эти образцы и посмотрю, что я могу сделать. Спасибо!
2. @Vinay Не просто указывайте ссылку, эта ссылка не работает. Пожалуйста, обновите свою ссылку.
Ответ №3:
Создайте XML-макет с помощью верхнего, нижнего и основного колонтитулов.вам нужно каждый раз расширять основное действие, вам нужно менять тело, увеличивая желаемый макет.
Ответ №4:
Я думаю, что элемент, который вам нравится в этих макетах, заключается в том, что они используют FrameLayout для нижней части дисплея.
Вероятно, они делают что-то вроде этого:
<LinearLayout android:orientation="vertical
.../>
<head layout element>
<FrameLayout element>
<footer layout element>
</LinearLayout>
Комментарии:
1. Есть ли разница между использованием нижнего колонтитула LinearLayout и использованием FrameLayout для нижнего колонтитула?
2. Это не нижний колонтитул, который является framelayout. Это панель содержимого, которая является макетом фрейма. Я отредактировал свой ответ, чтобы быть более конкретным.
3. Я понимаю, что вы имеете в виду. Я изменил «тело» с LinearLayout на FrameLayout, но я не увидел разницы между ними. Есть ли практические преимущества использования FrameLayout в этой ситуации?
4. Насколько я знаю, нет. Я думаю, что они просто выглядят лучше.