我设置了自定义对话框,我将布局的宽度设置为wrap_content
,但它仍然占据整个屏幕宽度。我甚至尝试将宽度设置为 100dp ,它仍然使用整个屏幕为什么会发生这种情况?
我已按如下方式设置对话框:
public class DialogGoToLine extends Dialog
{
//The root view of the dialog
private static View rootView;
public DialogGoToLine(Context context, int themeResId){
super(context, themeResId);
}
@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
//Allow the dialog to be canceled by tapping out of its bounds
setCancelable(true);
//Inflate the custom layout
LayoutInflater layoutInflater = LayoutInflater.from(HotspotHelper.getAppContext());
rootView = layoutInflater.inflate(R.layout.dialog_go_to_line, null);
//Set up the layout
//setTitle(HotspotHelper.getAppContext().getString(R.string.clientDetails));
//setTitle("Go to line");
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(rootView);
final EditText editText = (EditText) rootView.findViewById(R.id.editTextGoToLine);
Button buttonGoToLine = (Button) rootView.findViewById(R.id.buttonGoToLine);
buttonGoToLine.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View p1)
{
int line = Integer.valueOf(editText.getText().toString()) - 1;
((LinearLayoutManager)LogActivity.recyclerViewLog.getLayoutManager()).scrollToPositionWithOffset(line, (int)HotspotHelper.dpToPx(30));
dismiss();
}
});
}
}
布局XML:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="100dp"
android:layout_height="wrap_content"
android:background="@color/colorPrimary"
android:gravity="center_vertical"
android:orientation="horizontal">
<TextView
android:id="@+id/textViewGoToLabel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="4dp"
android:labelFor="@+id/editTextGoToLine"
android:text="Go to line: "
android:background="@color/accent"
android:textColor="@color/primaryText"
android:textSize="18sp"/>
<EditText
android:id="@id/editTextGoToLine"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:singleLine="true"
android:layout_margin="4dp"
android:layout_centerVertical="true"
android:inputType="number"
android:gravity="center"
android:textSize="18sp"/>
<Button
android:id="@+id/buttonGoToLine"
android:layout_width="wrap_content"
android:text="Go"
android:layout_margin="4dp"
android:textSize="18sp"
android:layout_height="wrap_content"/>
修改1 如果它有所不同,这个对话框有一个样式,我在其中声明了这个drawable的背景:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
<solid android:color="@color/colorPrimary"/>
<corners
android:radius="2dp" />
</shape>
答案 0 :(得分:1)
我遇到了同样的问题,我遇到了一个解决方案。如果将固定宽度或wrap_content赋予布局的根,则不会考虑这一点。我不知道背后的原因。在根目录中放置一个父布局,并为内部父级提供所需的宽度和高度,将所有视图放在此父级中。我希望它有所帮助。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/colorPrimary"
android:gravity="center_vertical"
android:orientation="horizontal">
<LinearLayout
android:layout_width="100dp"
android:layout_height="wrap_content"
android:orientation="horizontal">
//put all your views inside this linear layout
<TextView......./>
<TextView......./>
<TextView......./>
</LinearLayout>
</LinearLayout>
答案 1 :(得分:1)
使用必须使用此方法setContentView(View view, ViewGroup.LayoutParams params)
而不是setContentView(rootView);
ViewGroup.LayoutParams params= new ViewGroup.LayoutParams(
ViewGroup.LayoutParams.WRAP_CONTENT,
ViewGroup.LayoutParams.WRAP_CONTENT);
//ViewGroup.LayoutParams params= new ViewGroup.LayoutParams(
// 300,
// 300);
//for coustom size
params.height = thumb_size;
params.width = thumb_size;
// set padding ,margins ,gravity as your desired
使用此 setContentView(rootView,params);
答案 2 :(得分:1)
出于某种原因,删除我应用于对话框的主题修复了wrap_content问题。自定义主题所做的唯一事情是设置对话框的背景,但删除它已解决了这个问题。
答案 3 :(得分:0)
尝试更改主线性布局中的android:orientation="vertical"
,因为您使用的是水平方向的线性布局,因此所有小部件都水平对齐,并且它们水平获取其指定的空间,这就是它覆盖整个屏幕的原因。
答案 4 :(得分:0)
在显示对话框之前尝试此操作:
dialog.getWindow().setLayout(context.getResources().getDimensionPixelSize(R.dimen.dialog_width), WindowManager.LayoutParams.WRAP_CONTENT)
dialog_width
是100dp
。