AlertDialog中的按钮问题(浮出屏幕)

时间:2014-03-05 20:52:55

标签: java android alertdialog

这是我的问题的图像: enter image description here

底部的那个方框是按钮的上半部分。每当我在对话框中有太多的股票期权时,它首先强制关闭屏幕,然后滚动。 我希望按钮固定在对话框的底部,然后滚动发生。

以下是代码:

public void buyStock(View view){
    Context context = getApplicationContext();

    //create ScrollView to hold everything
    ScrollView scrollView = new ScrollView(context);

    //generate content for dialog       
    LinearLayout dialogContainer = new LinearLayout(context);
    dialogContainer.setOrientation(LinearLayout.VERTICAL);
    LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, 400, 1);
    dialogContainer.setLayoutParams(params);
    dialogContainer.setPadding(15, 15, 0, 15);
    dialogContainer.setBackgroundColor(Color.WHITE);

    //each hotel stock options
    for (int i = 0; i < hotels.size(); i++) {
        Hotel testHotel = hotels.get(i);
        testHotel.setPrice(200);
        View stockPicker = getStockPicker(testHotel);
        LinearLayout.LayoutParams pickerParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, 100, 1.0f);
        pickerParams.gravity = Gravity.LEFT;
        stockPicker.setLayoutParams(pickerParams);
        dialogContainer.addView(stockPicker);
        stockPicker.setBackgroundColor(0xffffff);
    }

    scrollView.addView(dialogContainer);

    LinearLayout dialogLayout = new LinearLayout(context);
    dialogLayout.setOrientation(LinearLayout.VERTICAL);

    Button buyButton = new Button(context);
    LinearLayout.LayoutParams buttonParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, 100);
    buyButton.setLayoutParams(buttonParams);

    LinearLayout buttonLayout = new LinearLayout(context);
    buttonLayout.addView(buyButton);

    dialogLayout.addView(scrollView);
    dialogLayout.addView(buttonLayout);

    ContextThemeWrapper ctw = new ContextThemeWrapper(this, R.style.AppTheme);

    AlertDialog.Builder buyStockDialog = new AlertDialog.Builder(ctw);
    buyStockDialog.setTitle("Buy Stock: ");
    buyStockDialog.setView(dialogLayout);

    buyStockDialog.show();

}

3 个答案:

答案 0 :(得分:0)

使dialogLayout成为RelativeLayout,然后将buttonParams声明为RelativeLayout.LayoutParams(布局参数根据父视图组类型声明,对于buyButton现在是RelativeLayout)。您还需要为scrollView声明RelativeLayout.LayoutParams。

注意:此代码在c#/ monodroid中,而不是原始java / android,因此可能需要快速移植一些方法和常量,但不应该太时间耗时。

如果这不能完全尝试使用RelativeLayout位置规则和/或重力的其他组合进行试验。如果它不成功,请告诉我。

RelativeLayout.LayoutParams scrollParams = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, some_height);

RelativeLayout.LayoutParams buttonParams = new RelativeLayout.LayoutParams(LayoutParams.MATCH_PARENT, 100);

然后,添加这些语句来控制scrollView和buyButton的位置

scrollParams.AddRule(LayoutRules.AlignParentLeft);
scrollParams.AddRule(LayoutRules.AlignParentTop);

buttonParams.AddRule(LayoutRules.Below, scrollView.Id);

要获取屏幕底部的按钮,请尝试以下两种方法之一

buttonParams.AddRule(LayoutRules.AlignParentBottom);

buyButton.Gravity = Gravity.BOTTOM

答案 1 :(得分:0)

尝试向scrollView

明确设置固定高度
scrollView.LayoutParameters.Height = HEIGHT;

我认为如果没有指定它默认为WRAP_CONTENT,这就是它缩放的原因。

如果您无法使用代码

,则可能需要在布局文件中进行设置
<ScrollView
  android:id="@+id/scroll_view_1
  android:layout_width="wrap_content"
  android:layout_height="100"/>

然后更改

ScrollView scrollView = new ScrollView(context);

ScrollView scrollView = findViewById(R.Id.scroll_view_1, this);

答案 2 :(得分:0)

尝试将scrollView包装在另一个LinearLayout中,并将此新布局的高度设置为固定宽度,使按钮保持足够低,以满足您的喜好。实际上,您可以使用ListView替换Scrollview,但在至少尝试使此修复程序首先运行之后才能执行此操作。 ListViews滚动,但如果没有此修复程序,您仍然会遇到此问题。


要修复下面提到的新问题(使用一些快速而脏的代码,您应该使用试验和错误来正确修复它),请尝试以下

//each hotel stock options
for (int i = 0; i < hotels.size(); i++) 
{
   // ...
}

if( hotels.size() < numberOfItemsNeededForCorrectView )
{
   for( int i=0; i < numberOfItemsNeededForCorrectView - hotels.size(); i++ )
   {
        View blankView = new View(context);
        LinearLayout.LayoutParams viewParams = new LinearLayout.LayoutParams(1, 100);

        blankView.setLayoutParams(viewParams);
        blankView.setViewState(ViewState.INVISIBLE);
        dialogContainer.addView(stockPicker);
   }
}

您可以尝试使用列表视图替换您的scrollView,看看是否可以解决问题。你也可以尝试调整布局和重力设置,直到你得到它,或尝试引入其他布局或重新组织你的布局(或使用RelativeLayout,它真的没那么糟糕)。