当我将活动属性"android:windowIsFloating"设置为true 时,Android 约束布局宽度不正确



当我使用名为 Match 的"0dp"时,它无法正确测量宽度 Constraints.It 只测量第一个 TextView 的宽度。

我的活动风格:

<style name="MyDialogStyle2"  parent="AppTheme">
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:windowFrame">@null</item>
<item name="android:windowNoTitle">true</item>        
<item name="android:windowIsFloating">true</item>
<item name="android:windowIsTranslucent">true</item>
<item name="android:windowContentOverlay">@null</item>
<item name="android:windowAnimationStyle">@android:style/Animation.Dialog</item>
<item name="android:backgroundDimEnabled">true</item>
<item name="android:layout_width">match_parent</item>
</style>

我的啦啦:

<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/white"
android:paddingBottom="18dp">
<android.support.constraint.Guideline
android:id="@+id/guideline_1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintGuide_percent="0.3" />
<TextView
android:id="@+id/searchTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="16dp"
android:text="@string/search_condition_title"
android:textColor="@color/font_color"
android:textStyle="bold" />

<TextView
android:id="@+id/searchDispatchStartTimeTitle"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginLeft="16dp"
android:layout_marginTop="30dp"
android:gravity="start"
android:paddingBottom="10dp"
android:text="@string/search_condition_dispatch_time"
android:textColor="@color/font_color"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="@id/guideline_1"
app:layout_constraintTop_toBottomOf="@id/searchTitle" />
<TextView
android:id="@+id/resetStartTime"
android:layout_width="28dp"
android:layout_height="20dp"
android:layout_marginRight="5dp"
android:layout_marginTop="25px"
android:background="@mipmap/reset"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="@id/searchDispatchStartTimeTitle" />
<EditText
android:id="@+id/searchDispatchStartTime"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginRight="5dp"
android:background="@drawable/textarea_shape"
android:focusable="false"
android:hint="@string/search_condition_dispatch_time_hint"
android:textColor="@color/font_color"
app:layout_constraintLeft_toRightOf="@id/guideline_1"
app:layout_constraintRight_toLeftOf="@id/resetStartTime"        
app:layout_constraintTop_toTopOf="@id/searchDispatchStartTimeTitle" />
</android.support.constraint.ConstraintLayout>

我想完成的是制作一个对话框来显示一些输入控件,但当前项目的对话框是由具有"android:windowIsFloating"属性且值为 true 的活动实现的。

我该如何解决它?

在您的样式中,为对话框宽高比大小和windowFullScreen添加属性

<style name="MyDialogStyle2" parent="AppTheme.NoActionBar">
<item name="android:windowMinWidthMajor">85%</item>
<item name="android:windowMinWidthMinor">85%</item>
<item name="android:windowFullscreen">true</item>
.....
</style>

还有一种编程方法来修改窗口大小的属性。

Display display = ((WindowManager) getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay();
int width = (int) (display.getWidth() * 0.7); 
int height = (int) (display.getHeight() * 0.9);  
getWindow().getAttributes().width = width;
getWindow().getAttributes().height = height;

最新更新