【问题标题】:Button at the bottom of a long ListView in a DialogFragment can't be seen无法看到 DialogFragment 中长 ListView 底部的按钮
【发布时间】:2015-09-04 17:52:54
【问题描述】:

如果ListView 有很多孩子,她需要滚动,我看不到FragmentDialog 末尾的关闭按钮。 在这里你可以看到 Dismiss Button

而在很长的ListView 中,您在底部看不到Dismiss Button

dialog.xml:

<?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" >

<TextView 
    android:id="@+id/dialog_header_text_view_id"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/dialog_header_text_view_text"
    android:textSize="22sp"
    android:textColor="@color/opening_words_dialog_header_color"
    android:layout_marginBottom="15sp"
    android:textStyle="bold"
    />

<ListView 
    android:id="@+id/dialog_list_view_id"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_below="@id/dialog_header_text_view_id"
    />

<Button 
    android:id="@+id/dialog_dismiss_button_id"
    android:layout_width="100sp"
    android:layout_height="50sp"
    android:text="@string/list_view_button_footer_text"
    android:layout_below="@+id/dialog_list_view_id"
    android:layout_centerHorizontal="true"
    />

</RelativeLayout>

CustomDialogFragment.java:

 public class CustomDialogFragmentYearsKnownLoveMails extends DialogFragment
{
    TextView listViewItemTextView;
    ArrayAdapter<String> arrayAdapter;
    ListView dialogListView;
    String[] items = new String[120];

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState)
    {
        View rootView = inflater.inflate(R.layout.dialog, container,false);

        setCancelable(false);

        listViewItemTextView = (TextView) rootView.findViewById(R.id.list_view_item_text_view_id);
        dialogListView = (ListView) rootView.findViewById(R.id.dialog_list_view_id);
        dissmissDialogButton = (Button) rootView.findViewById(R.id.dialog_dismiss_button_id);

        for (int i = 0;i < items.length;i++)
        {
            items[i] = "" + (i + 1);
        }

        arrayAdapter = new ArrayAdapter<String>(LoveMailsActivity.this, R.layout.list_view_row,R.id.row_text_view_id,items);
        dialogListView.setAdapter(arrayAdapter);

        dialogListView.setOnItemClickListener(new OnItemClickListener() 
        {
            @Override
            public void onItemClick(AdapterView<?> parent, View view,int position, long id)
            {
                Toast.makeText(getActivity(), items[position], Toast.LENGTH_SHORT).show();
                loveEmailYearsKnownTextView.setText(items[position]);
            }
        });

        dissmissDialogButton.setOnClickListener(new View.OnClickListener() // Dismiss button click
        {
            @Override
            public void onClick(View v) 
            {
                dismiss();
            }
        });

        return rootView;
    }
}

那么它有什么问题呢? 如果您需要更多信息,请询问。

【问题讨论】:

  • 将RelativeLayout包装到scrollView
  • @JerrySangma 它解决了问题,但它看起来和功能非常非常糟糕。

标签: java android android-listview android-button android-dialogfragment


【解决方案1】:

列表视图,通过上面和下面的约束,从文本视图的底部(即基线)“拉伸”到按钮的顶部。通常我开始编写接触父视图的组件(即对齐父视图的顶部/底部)并以中间的视图作为此视图列表完成。

诀窍是在文本视图下方和按钮上方展开列表,如下所示:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <TextView
        android:id="@+id/dialog_header_text_view_id"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/dialog_header_text_view_text"
        android:textSize="22sp"
        android:textColor="@color/opening_words_dialog_header_color"
        android:layout_marginBottom="15sp"
        android:textStyle="bold"
        />

    <Button
        android:id="@+id/dialog_dismiss_button_id"
        android:layout_width="100sp"
        android:layout_height="50sp"
        android:text="@string/list_view_button_footer_text"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        />

    <ListView
        android:id="@+id/dialog_list_view_id"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/dialog_header_text_view_id"
        android:layout_above="@id/dialog_dismiss_button_id"
        />
</RelativeLayout>

【讨论】:

    【解决方案2】:

    对于 XML 中的列表视图,将属性 layout_below 更改为 layout_above ="@id/dialog_dismiss_button_id"

    并从 Button 中移除 layout_below 属性。并将其添加到按钮
    android:layout_alignParentBottom="true" 希望这对你有帮助:)

    【讨论】:

    • 但我希望它低于ListView
    • @God 抱歉,您需要查看列表。查看我的编辑
    • 不,这很糟糕,ListView 中的孩子不见了 :)
    猜你喜欢
    • 2014-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-26
    • 1970-01-01
    • 2020-04-06
    • 2016-06-22
    相关资源
    最近更新 更多