Android 可滚动的 AlertDialog 以编程方式

Posted

技术标签:

【中文标题】Android 可滚动的 AlertDialog 以编程方式【英文标题】:Android scrollable AlertDialog programmatically 【发布时间】:2014-05-28 14:16:29 【问题描述】:

如何以编程方式使我的 AlertDialog 可滚动?

我的 AlertDialog 是这样定义的:

private void DisplayAlertChoice(String title, String msg, final int pos)
       
    alert = new AlertDialog.Builder(this);
    alert.setTitle(title);
    final LinearLayout layout = new LinearLayout(this);
    layout.setOrientation(LinearLayout.VERTICAL);
     CheckBox[] t=new CheckBox[15];
     for (i=0;i<currentBattery.temperatureNumber;i++)
                    
         t[i]=new CheckBox(this);
         t[i].setText("title");
         t[i].setChecked(false);
         t[i].setOnCheckedChangeListener(this);

         layout.addView(t[i]);      
     
    alert.setView(layout);      
    alert.show();   

我尝试了一些在网上找到的解决方案,但对我不起作用。

谁能给我一个相关的解决方案,让它以编程方式滚动?

【问题讨论】:

你试过把 LinearLayout 放到 ScrollView 里吗? 你可能还想看看multi-choice mode 多选很酷@codeMagic @blackbelt :我试过了,但它迫使我的应用停止。 使用 ScrollView 应该可以工作。请发布您获得的堆栈跟踪。 【参考方案1】:

我试过了,但它会强制我的应用停止。

ScrollView 可以只有一个孩子。这是一个android约束。所以,做

    final LinearLayout layout = new LinearLayout(this);
    ScrollView scrollView = new ScrollView(this);
    layout.setOrientation(LinearLayout.VERTICAL);
     CheckBox[] t=new CheckBox[15];
     for (i=0;i<currentBattery.temperatureNumber;i++)
                    
         t[i]=new CheckBox(this);
         t[i].setText("title");
         t[i].setChecked(false);
         t[i].setOnCheckedChangeListener(this);

         scrollView.addView(t[i]);      
     

会使您的应用程序崩溃,因为您向 ScrollView 添加了多个子项。但是如果你这样做了

final LinearLayout layout = new LinearLayout(this);
layout.setOrientation(LinearLayout.VERTICAL);
 CheckBox[] t=new CheckBox[15];
 for (i=0;i<currentBattery.temperatureNumber;i++)
                
     t[i]=new CheckBox(this);
     t[i].setText("title");
     t[i].setChecked(false);
     t[i].setOnCheckedChangeListener(this);

     layout.addView(t[i]);      
 
 final ScrollView scrollView = new ScrollView(this); 
 scrollView.addView(layout);

它应该可以顺利运行。

【讨论】:

谢谢它的工作。我的错误是将“布局”而不是“滚动视图”添加到我的警报对象。 alert.setView(layout); 这根本不适合我 8 年前它起作用了。 API 变化很大

以上是关于Android 可滚动的 AlertDialog 以编程方式的主要内容,如果未能解决你的问题,请参考以下文章

NestedScrollView 没有在 AlertDialog 内扩展高度

转载android AlertDialog

标题不在 AlertDialog 上垂直居中

Android:如何设置AlertDialog的宽度和高度,以及AlertDialog风格的按钮?

Android AlertDialog

Android学习——AlertDialog