- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在我的 Android 应用程序中创建了一个自定义对话框首选项,但我无法弄清楚如何让显示的对话框跨越显示器的整个宽度。
image of dialog with too much space on left and right side
我发现了许多建议的解决方案,以在全屏模式下获得正常的对话框
但是通过 getWindow 设置属性不起作用:
@Override
public Dialog getDialog() {
Dialog dialog = super.getDialog();
dialog.getWindow().setLayout(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
// or
// dialog.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
return dialog;
}
并且将全屏主题应用于我的对话框根元素也没有完成这项工作:
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
[...]
android:theme="@style/FullscreenTheme">
此外,我无法访问对话框的 onCreate 方法(至少我不知道如何),无法在那里设置样式。
有没有人遇到同样的问题并针对这个非常具体的问题找到了解决方案?
我的布局:
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:animateLayoutChanges="true"
android:orientation="vertical"
android:padding="0dp"
android:paddingTop="@dimen/preferences_dialog_def_padding"
android:paddingBottom="@dimen/preferences_dialog_def_padding">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<View
android:layout_width="match_parent"
android:layout_height="2dp"
android:layout_marginTop="-2dp"
android:background="@color/expandable_preference_divider"/>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="@dimen/preferences_expandable_margin_top_bottom"
android:layout_marginTop="@dimen/preferences_expandable_margin_top_bottom">
<RelativeLayout
android:id="@+id/icon_wrapper_choose"
android:layout_width="@dimen/preferences_expandable_icon_wrapper_size"
android:layout_height="@dimen/preferences_expandable_icon_wrapper_size"
android:layout_marginBottom="0dp"
android:layout_marginEnd="@dimen/preference_expandable_icon_margin"
android:layout_marginStart="@dimen/preference_expandable_icon_margin"
android:layout_marginTop="0dp"
android:gravity="center">
<ImageView
android:layout_width="@dimen/preferences_expandable_icon_size"
android:layout_height="@dimen/preferences_expandable_icon_size"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:cropToPadding="true"
android:scaleType="centerCrop"
android:src="@drawable/ic_settings_white_36dp"/>
</RelativeLayout>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_toEndOf="@+id/icon_wrapper_choose"
android:paddingBottom="@dimen/preferences_expandable_text_padding_top_bottom"
android:paddingTop="@dimen/preferences_expandable_text_padding_top_bottom"
android:text="@string/pref_wheel_circumference_choose"
android:textColor="@color/colorAccent"
android:textSize="@dimen/text_size_medium"
android:textStyle="bold"/>
</RelativeLayout>
<TextView
android:layout_width="match_parent"
android:layout_marginEnd="@dimen/preference_expandable_icon_margin"
android:layout_marginStart="@dimen/preference_expandable_icon_margin"
android:layout_height="wrap_content"
android:text="@string/etrto_hint"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:minHeight="?android:attr/listPreferredItemHeight"
android:orientation="horizontal"
android:paddingBottom="20dp"
android:paddingEnd="?android:attr/scrollbarSize"
android:layout_marginStart="@dimen/preference_expandable_icon_margin"
android:weightSum="3"
>
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@string/etrto"/>
<Spinner
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="2"/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:orientation="horizontal"
android:paddingBottom="20dp"
android:paddingEnd="?android:attr/scrollbarSize"
android:layout_marginStart="@dimen/preference_expandable_icon_margin"
android:weightSum="3"
>
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@string/manufacturer"/>
<Spinner
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="2"/>
</LinearLayout>
</LinearLayout>
<View
android:layout_width="match_parent"
android:layout_height="2dp"
android:layout_marginTop="-2dp"
android:background="@color/expandable_preference_divider"/>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/preference_category_wrapper"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:animateLayoutChanges="true"
android:orientation="vertical"
android:padding="5dp">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="@dimen/preferences_expandable_margin_top_bottom"
android:layout_marginTop="@dimen/preferences_expandable_margin_top_bottom">
<RelativeLayout
android:id="@+id/icon_wrapper_manual"
android:layout_width="@dimen/preferences_expandable_icon_wrapper_size"
android:layout_height="@dimen/preferences_expandable_icon_wrapper_size"
android:layout_marginBottom="0dp"
android:layout_marginEnd="@dimen/preference_expandable_icon_margin"
android:layout_marginStart="@dimen/preference_expandable_icon_margin"
android:layout_marginTop="0dp"
android:gravity="center">
<ImageView
android:id="@+android:id/icon"
android:layout_width="@dimen/preferences_expandable_icon_size"
android:layout_height="@dimen/preferences_expandable_icon_size"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:cropToPadding="true"
android:scaleType="centerCrop"
android:src="@drawable/ic_edit_white_36dp"/>
</RelativeLayout>
<TextView
android:id="@+android:id/title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_toEndOf="@+id/icon_wrapper_manual"
android:paddingBottom="@dimen/preferences_expandable_text_padding_top_bottom"
android:paddingTop="@dimen/preferences_expandable_text_padding_top_bottom"
android:text="@string/pref_wheel_circumference_manually"
android:textColor="@color/colorAccent"
android:textSize="@dimen/text_size_medium"
android:textStyle="bold"/>
</RelativeLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:minHeight="?android:attr/listPreferredItemHeight"
android:orientation="horizontal"
android:paddingBottom="20dp"
android:paddingEnd="?android:attr/scrollbarSize"
android:layout_marginStart="@dimen/preference_expandable_icon_margin"
android:weightSum="2.5"
>
<EditText
android:id="@+id/pref_dialog_wheelcircumference_et"
android:layout_width="0dp"
android:layout_weight="2"
android:layout_height="wrap_content"
android:textAlignment="textEnd"
android:textColor="@color/colorFont"
android:textSize="@dimen/text_size_small"
android:inputType="number"/>
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="0.5"
android:textAlignment="center"
android:text="@string/wheel_circumference_unit"/>
</LinearLayout>
</LinearLayout>
</LinearLayout>
我的自定义偏好类
public class WheelCircumferencePreference extends android.preference.DialogPreference {
private static String TAG = "CustomSwitchPreference";
private int mWheelCircumference;
public static int WHEEL_CIRCUMFERENCE_DEFAULT = 2125;
private int mDialogLayoutResId = R.layout.pref_dialog_wheelcircumference;
public WheelCircumferencePreference(Context context) {
this(context, null);
}
public WheelCircumferencePreference(Context context, AttributeSet attrs) {
this(context, attrs, R.attr.dialogPreferenceStyle);
}
public WheelCircumferencePreference(Context context, AttributeSet attrs,
int defStyleAttr) {
super(context, attrs, defStyleAttr);
setLayoutResource(R.layout.custom_preference);
setDialogLayoutResource(mDialogLayoutResId);
setPositiveButtonText(getContext().getString(R.string.dialog_save));
setNegativeButtonText(getContext().getString(R.string.dialog_cancel));
}
@Override
protected Object onGetDefaultValue(TypedArray a, int index) {
// Default value from attribute. Fallback value is set to WHEEL_CIRCUMFERENCE_DEFAULT.
return a.getInteger(index, WHEEL_CIRCUMFERENCE_DEFAULT);
}
@Override
protected void onSetInitialValue(boolean restorePersistedValue,
Object defaultValue) {
would load value from shared preferences
if (restorePersistedValue) {
mWheelCircumference = getPersistedInt(WHEEL_CIRCUMFERENCE_DEFAULT);
} else {
mWheelCircumference = (Integer) defaultValue;
persistInt(mWheelCircumference);
}
}
private EditText mWheelCircumferenceEt;
@Override
protected void onBindDialogView(View view) {
mWheelCircumferenceEt = view.findViewById(R.id.pref_dialog_wheelcircumference_et);
if (mWheelCircumferenceEt == null) {
throw new IllegalStateException("preference dialog view must contain" +
" a EditText with id 'pref_dialog_wheelcircumference_et'");
}
mWheelCircumferenceEt.setText(Integer.toString(mWheelCircumference));
super.onBindDialogView(view);
}
@Override
public Dialog getDialog() {
//Dialog dialog = super.getDialog();
// WindowManager.LayoutParams p = getDialog().getWindow().getAttributes();
//p.height = LinearLayout.LayoutParams.WRAP_CONTENT;
//dialog.getWindow().setAttributes(p);
return dialog;
}
@Override
protected void onDialogClosed(boolean positiveResult) {
if (positiveResult) {
String circumferenceText = mWheelCircumferenceEt.getText().toString();
try {
mWheelCircumference = Integer.parseInt(circumferenceText);
} catch (Exception e) {
NLog.e(TAG, "onDialogClosed - ", e);
mWheelCircumference = WheelCircumferencePreference.WHEEL_CIRCUMFERENCE_DEFAULT;
}
persistInt(mWheelCircumference);
}
}
编辑:
实际上我只希望对话框跨越屏幕的整个宽度,而不是高度。如果我要使用额外的 PreferenceFragment(因为 DialogPreference 已经嵌入到 PreferenceFragment 中),“对话框”(又名 Fragment)将占用完整的宽度和高度(我猜)。
我已经实现了一个没有 DialogPrefrence 的解决方案,它可以工作但并不十分优雅
例子:
Preference preference = findPreference(EXAMPLE_PREFRENCE);
if (preference != null) {
preference.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick(Preference preference) {
// showDialog();
}
});
但是由于我有很多首选项会显示对话框,所以用于创建和显示对话框的代码会加载 SettingsFragment 并使其几乎不可读。因此,我认为将显示对话框和处理首选项值的责任交给首选项和 XML 布局会是一个很好的解决方案。
不幸的是,我遇到了上面提到的“全宽问题”。
注意:修复了getDialog的代码,因为我测试了不同的版本(也结合了xml主题集)
最佳答案
最后我确实找到了这个问题的解决方案:
在showDialog方法中获取Preference的AlertDialog
@Override
protected void showDialog(Bundle state) {
super.showDialog(state);
CustomDialogPreference.makeDialogFullScreen((AlertDialog) getDialog());
}
让它跨越整个宽度:
public static void makeDialogFullScreen(AlertDialog d) {
NLog.d(TAG, "makeDialogFullScreen enter ");
if (d != null) {
ViewGroup.LayoutParams params = d.getWindow().getAttributes();
if (params != null) {
params.width = WindowManager.LayoutParams.MATCH_PARENT;
params.height = WindowManager.LayoutParams.WRAP_CONTENT;
d.getWindow().setAttributes((android.view.WindowManager.LayoutParams) params);
}
}
}
关于android - 全屏宽度的 DialogPreference,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49410646/
我有一个 DialogPreference。我想设置它的对话框标题 (setTitle()),但它不起作用。 我的代码: public class RestoreDefaultApperanceDia
我想要完成的事情:在 DialogPreference 显示的消息文本中创建一个可点击的超链接。 到目前为止我的解决方案:关注此主题:link ,我完成了在 DialogPreference 中显示的
我正在尝试创建自定义对话框首选项,它将包含带有两个单选按钮和一个编辑文本的单选组。如果我写类似 尝试创建包含此对话框首选项的 PreferenceActivity 时应用程序中断。 我想我必须将 D
我在我的 Android 应用程序中创建了一个自定义对话框首选项,但我无法弄清楚如何让显示的对话框跨越显示器的整个宽度。 image of dialog with too much space on
我正尝试按如下方式创建对话框首选项 但是当 Activity 运行时它强制关闭并出现以下错误 11-01 01:21:18.820: E/AndroidRuntime(19644): java.la
我有一个这样定义的类 public class MyDialog extends DialogPreference { 并在 preference.xml 中 我的问题是如何以编程方式启动 MyDi
我创建了扩展 DialogPreference 的新 TimeDialogPreference。 在 preferences.xml 我有: 如何从 TimeDialogPreference 类访问
我想在第一次启动应用程序时打开一些首选项(通过扩展 DialogPreference 创建)。此外,这些首选项用作通常的首选项。 有没有办法做到这一点? 编辑: 我有我的自定义偏好,如下所示: pub
我正在开发自定义 DialogPreference。 当用户在对话框外单击时,它会被取消,我需要避免这种情况。 我知道 Dialog 有方法 setCanceledOnTouchOutside(boo
我有一个自定义的 DialogPreference,它只包含一个日期选择器。一切正常,除了对话框有一个巨大的边框和标题,如下所示。 我希望对话框只是日期选择器: 我已经想出了如何通过将窗口标题设置为
我的首选项 Activity 中有一个对话框,定义如下(布局在 xml 中定义): public class DialogPreference extends android.preference.D
我在我的程序中使用 DialogPreference,现在我想使用 DialogPreference 在单击 OK 按钮时重定向到网页。 Preferences.xml:- TimePicke
我根据 this link. 的回答创建了自定义首选项对话框 现在我想在我的 ActivityPreferenceScreen Activity 类中的那个按钮上单击事件。我怎样才能做到这一点? 最佳
我希望我的程序存储远程服务的凭据,这样用户只需在首选项中设置一次就再也不会这样做了。 因此,我将 DialogPreference 子类化,我的类显示了一个漂亮的对话框,其中包含两个用于登录和密码的字
我目前有一个扩展 DialogPreference 的自定义 Dialog 类(这当然是 PreferenceScreen 的一部分)。 此对话框具有处理保存和取消的自定义按钮。因此,我想去掉标准的“
我正在尝试在首选项布局中实现 DialogPreference。不幸的是,下面的代码总是导致强制关闭。 EditTextPreferences 运行良好,但我需要一个简单的对话框。有什么建议吗? 最
尝试编写自定义对话框首选项(NumberPickerDialog)。尽管 android 文档详细介绍了这个主题,但我似乎错过了他们文档中的一些基本构建 block 。 到目前为止,我所拥有的是一个显
我有一个用于 SeekBar 的自定义 DialogPreference。我覆盖 style="@style/Theme.Putio.Dialog" 并从 XML 扩展布局。 问题是,生成的对话框使用
我有一个 DialogPreference,我想避免用户在按“确定”、“取消”等键时关闭它。 我应该怎么做? 编辑: 我试图在创建对话框时触及“确定”按钮以禁用它。但是我做不到:( 最佳答案 解决方法
在我的应用程序中,我使用 Theme.Holo 和 Theme.Holo.Light 没有任何问题。当使用 Holo 主题并且我单击 DialogPreference/ListPreference 时
我是一名优秀的程序员,十分优秀!