2016-11-22 93 views
0

我在我的對話框中有一個列表視圖,然後我必須使用頁眉佈局和頁腳佈局。我這樣做的方式,我的標題佈局對齊頂部和頁腳佈局對齊。但它有一個問題。看看下面的圖片.. Dialog with the list inside with header and footer在頁眉和頁腳對話框中的列表視圖

但是,這樣做的對話框變長,其中預計不會

我在這種情況下traped大小。那麼,如果我對齊我的頁腳與列表視圖結束,那麼頁腳離開屏幕。這也是預料不到的。

我想要什麼:

  • 我想我的列表視圖應該是可見的對話與頭部佈局的中心對齊頂部和頁腳佈局對齊到對話框中的bootm bottomtom邊框,它不應該採取全屏幕。
  • 是不是有一種方法可以將頁腳對齊到對話框底部和對話框底部自行保持其高度(注意:我不想給對話框硬編碼的高度,因爲我希望對話框在所有設備上看起來相同)

請幫我卡在這種情況。如果我們看看安裝應用時出現的Google對話框,它會在其中心有一個簡短的對話框,並且按鈕對齊到對話框的底部。他們如何做到這一點?

回答

0

您可以設置佈局,你Dialog像下面這樣

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:orientation="vertical"> 
    <TextView android:id="@+id/header_txt" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:text="Header Text" 
     android:gravity="center|top"/> 
    <ListView android:id="@+id/listView" 
     android:layout_width="match_parent" 
     android:layout_height="200dp" 
     android:gravity="center_vertical/> 
    <TextView android:id="@+id/footer_txt" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:text="Footer Text" 
     android:gravity="center|bottom"/> 
</LinearLayout> 

這將設置Header View to TopListView to CenterFooter View to Bottom

+0

母艦一樣拿不出頁腳出入畫面時,如果列表視圖是大? –

+0

@AbdulSalamAli如果你的數據很大,那麼更好的方法是你必須給「ListView」修正「height」,如果你不喜歡這種方式,沒有其他選擇,那麼你就改變了結構。 – Ironman

+0

是的,我剛剛檢查過,如果列表視圖太大,頁腳跳出屏幕 –

0

你可以試試這個,......創建一個XML和複製粘貼此代碼設置你的對話框XML

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


    <LinearLayout 
     android:paddingBottom="8dp" 
     android:paddingTop="8dp" 
     android:layout_marginTop="10dp" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:background="#ff0000" 
     android:gravity="center" 
     android:orientation="vertical" 
     > 


     <RelativeLayout 
      android:id="@+id/table_rl" 
      android:padding="10dp" 
      android:layout_width="match_parent" 
      android:layout_weight="1" 
      android:layout_height="0dp" 
      android:orientation="vertical"> 

     <TextView 
      android:id="@+id/your_items_tv" 
      android:textColor="@color/text_black" 
      customFontPath="lato_black.ttf" 
      android:layout_gravity="center" 
      android:gravity="center" 
      android:layout_marginTop="20dp" 
      android:text="HEADING" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" /> 

      <LinearLayout 
       android:layout_below="@+id/your_items_tv" 
       android:paddingBottom="5dp" 
       android:layout_marginTop="10dp" 
       android:paddingTop="5dp" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:orientation="horizontal"> 

       <TextView 
        android:textColor="@color/text_black" 
        customFontPath="lato_bold.ttf" 
        android:layout_gravity="center" 
        android:gravity="left" 
        android:layout_width="0dp" 
        android:layout_weight="1" 
        android:layout_height="wrap_content" 
        android:text="TOP BAR"/> 

      </LinearLayout> 
      <ListView 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:orientation="vertical"></LinearLayout> 
     </RelativeLayout> 
     <LinearLayout 
      android:layout_marginLeft="5dp" 
      android:layout_marginRight="5dp" 
      android:layout_below="@+id/table_rl" 
      android:orientation="horizontal" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:background="#ff00ff"> 

      <TextView 
       android:padding="5dp" 
       android:textSize="18dp" 
       android:textColor="@color/text_black" 
       customFontPath="lato_bold.ttf" 
       android:layout_width="0dp" 
       android:layout_weight="1" 
       android:layout_height="wrap_content" 
       android:text="Bottom Bar "/> 

     </LinearLayout> 


    </LinearLayout> 
</LinearLayout> 

1

這裏是你的問題的動態解決方案.. 樣品對話框XML文件名activity_list_test.xml ..

<?xml version="1.0" encoding="utf-8"?><LinearLayout 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" 
android:background="@color/page_bg" 
android:orientation="vertical"> 

<Button 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:text="Header Button" /> 

<ListView 
    android:id="@+id/lvCommon" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_weight="1" /> 

<Button 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:text="Bottom Button" /></LinearLayout>` 

下面是一個片段/活動,你要調用..

private void showAlert() { 

    AlertDialog.Builder dialog = new AlertDialog.Builder(getActivity()); 
    View view = LayoutInflater.from(getActivity()).inflate(R.layout.activity_list_test, null); 
    dialog.setView(view); 
    dialog.setTitle(null); 
    dialog.setMessage(null); 

    ArrayList<String> mList = new ArrayList<>(); 
    for (int i = 0; i < 15; i++) { 
     mList.add("ABC"); 
    } 


    ListView lvCommon = (ListView) view.findViewById(R.id.lvCommon); 

    int deviceHeight = getScreenSize(getActivity()).y; 
    LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, deviceHeight/3,1f); 
    lvCommon.setLayoutParams(layoutParams); 
    lvCommon.setAdapter(new ArrayAdapter<>(getActivity(), android.R.layout.simple_list_item_1, mList)); 
    dialog.setCancelable(false); 
    dialog.show(); 
} 

有設備高度將自動測量,並根據它的對話框大小將是"deviceheight/3" ..所以它將在所有設備保持..

現在你需要的方法getScreenSize ..所以這裏是::

public static Point getScreenSize(Activity act) { 
    int screenWidth = 0; 
    int screenHeight = 0; 

    final DisplayMetrics metrics = new DisplayMetrics(); 
    act.getWindowManager().getDefaultDisplay().getMetrics(metrics); 
    screenWidth = metrics.widthPixels; 
    screenHeight = metrics.heightPixels; 

    return new Point(screenWidth, screenHeight); 

} 
+0

承諾,我會嘗試 –