【发布时间】:2017-09-05 03:39:56
【问题描述】:
所以基本上,我有这个 DialogFragment 是全屏的,并且在进度条上有一个按钮(如果您单击该按钮,它会消失并且进度条是可见的)。我最初将 xml 放在一个活动中,并且那里的一切都按预期工作,但现在我想将它重构为全屏对话框片段。
问题是,进度条顶部的按钮现在与 parentLayout 的底部对齐
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_gps_loading"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/bg_setsensor"
tools:ignore="MissingPrefix"
>
<ImageView
android:layout_width="90dp"
android:layout_height="38dp"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_marginTop="45dp"
/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:layout_marginLeft="40dp"
android:layout_marginRight="40dp"
android:orientation="vertical"
>
<ImageView
android:layout_width="50dp"
android:layout_height="50dp"
android:layout_gravity="center_horizontal"
android:src="@drawable/ic_location"
/>
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center_horizontal"
android:layout_marginTop="17dp"
android:gravity="center_horizontal"
android:text="@string/promptGpsPermissionBody"
style="@style/fullscreenText"
/>
</LinearLayout>
<ProgressBar
android:id="@+id/progressBar2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignBottom="@+id/btnActivateGps"
android:layout_alignTop="@+id/btnActivateGps"
style="?android:attr/progressBarStyle"
/>
<Button
android:id="@+id/btnActivateGps"
android:layout_width="match_parent"
android:layout_height="50dp"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:layout_marginBottom="71dp"
android:layout_marginLeft="63dp"
android:layout_marginRight="63dp"
android:background="@color/white"
android:enabled="true"
android:visibility="visible"
/>
</RelativeLayout>
特别奇怪的是,进度条与按钮对齐,但它仍然位于与之前相同的位置
这里是java代码
public class GpsSensorDialog extends DialogFragment {
@NonNull @Override public Dialog onCreateDialog(Bundle savedInstanceState) {
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
LayoutInflater inflater = getActivity().getLayoutInflater();
View view = inflater.inflate(R.layout.activity_gps_sensor, null);
builder.setView(view);
Dialog dialog = builder.create();
if (dialog.getWindow() != null) {
dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
dialog.getWindow()
.setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
}
return dialog;
}
@Override public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setStyle(STYLE_NO_TITLE, R.style.CustomDialog);
}
public static GpsSensorDialog newInstance() {
Bundle args = new Bundle();
GpsSensorDialog fragment = new GpsSensorDialog();
fragment.setArguments(args);
return fragment;
}
@Override public void onStart() {
super.onStart();
getDialog().getWindow()
.setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
}
}
以及我在 onCreate 中设置的样式
<style name="CustomDialog">
<item name="android:windowFrame">@null</item>
<item name="android:windowIsFloating">true</item>
<item name="android:windowContentOverlay">@null</item>
<item name="android:windowAnimationStyle">@android:style/Animation.Dialog</item>
<item name="android:windowSoftInputMode">stateUnspecified|adjustPan</item>
</style>
【问题讨论】:
-
从 Button 中移除:`android:layout_alignParentBottom="true"`..
-
那行不通。我必须将它与父母的底部对齐,然后将 bottomMargin 设置为 70 dips
-
面临同样的问题?我知道它的老问题。有没有机会记住实际的修复方法?
-
@AneesDeen 遗憾的是没有,但也许使用 ConstraintLayout 而不是 RelativeLayout 可以修复它。可悲的是,我不再有代码了,因为我不再在那家公司工作:/
标签: android margin android-relativelayout