首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Android Dialog 中 Button 不顯示的原因:LinearLayout 高度設置問題

     編輯:程式設計綜合問答

在 Android 自定義 Dialog 佈局中,若 TextView 設置 layout_height="fill_parent" (即 match_parent),會佔滿整個對話框空間,導致後續的 Button 被擠出可視區域而不顯示。

問題佈局代碼

<LinearLayout xmlns:android="https://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:padding="5dp">

    <TextView
        android:id="@+id/textView1"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"  <!-- 錯誤:fill_parent 佔滿高度 -->
        android:text="TextView" />

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Button" />
</LinearLayout>

原因分析

  • LinearLayout 垂直佈局,子視圖按順序排列
  • TextView 設置 layout_height="fill_parent" 要求佔滿父佈局剩余高度
  • Dialog 高度由內容決定 (wrap_content),但 TextView 強制佔滿
  • Button 被擠到 TextView 之後,超出可視區域

解決方法

修正 TextView 高度為 wrap_content

<TextView
    android:id="@+id/textView1"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"  <!-- 修正:包裹內容高度 -->
    android:text="TextView" />

完整修正佈局

<LinearLayout xmlns:android="https://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:padding="16dp">

    <TextView
        android:id="@+id/textView1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="請修正以下錯誤:"
        android:textSize="16sp"
        android:textColor="#333333" />

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:layout_marginTop="16dp"
        android:paddingHorizontal="32dp"
        android:text="關閉" />
</LinearLayout>

Dialog 代碼最佳實踐

Dialog dialog = new Dialog(this);
dialog.setContentView(R.layout.custom_dialog); // 直接使用佈局資源
dialog.setTitle("提示");

TextView textView = dialog.findViewById(R.id.textView1);
textView.setText(errorMessage);

Button button = dialog.findViewById(R.id.button1);
button.setOnClickListener(v -> dialog.dismiss());

dialog.show();

現代替代:AlertDialog.Builder

new AlertDialog.Builder(this)
    .setTitle("提示")
    .setMessage(errorMessage)
    .setPositiveButton("確定", (dialog, which) -> dialog.dismiss())
    .setNegativeButton("取消", null)
    .show();

關鍵佈局原則總結

屬性行為適用場景
wrap_content適應內容大小文字、圖片、按鈕等內容視圖
match_parent填滿父佈局容器視圖、背景、列表項根視圖
0dp + layout_weight按權重分配剩余空間均分佈局、自適應寬高
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved