这是我的问题的图像:
底部的那个方框是按钮的上半部分。每当我在对话框中有太多的股票期权时,它首先强制关闭屏幕,然后滚动。 我希望按钮固定在对话框的底部,然后滚动发生。
以下是代码:
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();
}
答案 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,它真的没那么糟糕)。