这是因为
更改屏幕方向后不会重新创建对话框
. 资源布局陈旧。
为了解决这个问题,你可以
检测方向变化
重新创建对话框
如果已经打开。
你可以用
onConfigurationChanged
在检测方向变化的活动中。
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
Toast.makeText(this, "landscape", Toast.LENGTH_SHORT).show();
} else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT){
Toast.makeText(this, "portrait", Toast.LENGTH_SHORT).show();
}
if (inviteDialog !=null && inviteDialog.isShowing()){
inviteDialog .dismiss();
displayInviteDialog();
}
}
private void displayInviteDialog() {
contactList = new ArrayList<>();
inviteDialog = new VeriDocDialog(ScratchAndWinActivity.this,
VeriDocDialog.TYPE_INVITE,
R.drawable.invite_32,
getString(R.string.str_invite_instruction),
getString(R.string.str_equation_invite),
contactList, VeriDocDialog.TYPE_INVITE);
inviteDialog.show();
}
编辑一下你的清单活动注册。
<activity android:name=".YourActivity"
android:configChanges="orientation">
建议:
1>您应该对对话框的父布局元素使用match\u parent。
android:layout_width="match_parent"
android:layout_height="match_parent"
this answer
更新
使用
嵌套滚动视图
我创建了一个示例,在这两种模式下都可以正常工作,您会惊讶地发现我没有为dialog设置任何特殊属性。这是样品。
import android.app.Dialog;
import android.content.Context;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.view.Window;
import android.view.WindowManager;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import com.innovanathinklabs.sample.R;
public class ListActivity extends AppCompatActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
MyDialog dialog = new MyDialog(this);
dialog.show();
Window window = dialog.getWindow();
window.setLayout(WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.MATCH_PARENT);
}
public static class MyDialog extends Dialog {
String[] mobileArray = {
"Android", "IPhone", "WindowsMobile", "Blackberry",
"WebOS", "Ubuntu", "Windows7", "Max OS X", "Android", "IPhone", "WindowsMobile", "Blackberry",
"WebOS", "Ubuntu", "Windows7", "Max OS X", "Android", "IPhone", "WindowsMobile", "Blackberry",
"WebOS", "Ubuntu", "Windows7", "Max OS X",
};
public MyDialog(@NonNull Context context) {
super(context);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.dialog_sample);
ArrayAdapter adapter = new ArrayAdapter<>(getContext(),
R.layout.row_list, mobileArray);
ListView listView = findViewById(R.id.listView);
listView.setAdapter(adapter);
}
}
}
和对话_示例.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="5">
</LinearLayout>
<ListView
android:id="@+id/listView"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="5"/>
<Button
android:id="@+id/button"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/app_name"/>
</LinearLayout>
请注意。
-
我没有处理方向,它的工作如预期。
-
我重视孩子的观点。所以它在两个方向上都会自动适应。
-