DialogWhenLarge屏幕宽度太窄

时间:2017-11-01 06:04:00

标签: android android-layout

当设备是平板电脑时,我需要进行对话活动,更广泛并且使用的屏幕比目前更多。

请看屏幕截图:

enter image description here

我需要大约70%的屏幕宽度?

有没有办法指定此对话框的宽度。

为实现这一目标,我有以下几点:

styles.xml

<resources>

  <!-- Base application theme. -->
  <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
  </style>

  <style name="AppTheme.NoActionBar">
    <item name="windowActionBar">false</item>
    <item name="windowNoTitle">true</item>
  </style>

  <style name="AppTheme.AppBarOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar"/>

  <style name="AppTheme.PopupOverlay" parent="ThemeOverlay.AppCompat.Light"/>

  <style name="DialogTheme" parent="AppTheme"/>

</resources>

styles.xml(sw600dp)

<resources>
   <style name="DialogTheme" parent="Theme.AppCompat.DialogWhenLarge"/>
</resources>

清单:

<manifest package="stillie.co.za.dialogwhenlarge"
          xmlns:android="http://schemas.android.com/apk/res/android">

  <application
      android:allowBackup="true"
      android:icon="@mipmap/ic_launcher"
      android:label="@string/app_name"
      android:roundIcon="@mipmap/ic_launcher_round"
      android:supportsRtl="true"
      android:theme="@style/AppTheme">
    <activity android:name=".MainActivity">
      <intent-filter>
        <action android:name="android.intent.action.MAIN"/>

        <category android:name="android.intent.category.LAUNCHER"/>
      </intent-filter>
    </activity>
    <activity
        android:name=".DialogWhenLargeActivity"
        android:label="@string/title_activity_dialog_when_large"
        android:theme="@style/DialogTheme"> <-----------notice this-----------
    </activity>
  </application>
</manifest>

有人知道如何只在平板电脑上放宽屏幕宽度。我现在如何设置它,当设备是一个手机时它工作正常,它的全屏应该是,但我唯一的问题是它的平板电脑,对话框主题太窄。

3 个答案:

答案 0 :(得分:2)

您有两个选择

  1. 创建自定义对话框&amp;添加以下行

    @Override
    public void onAttachedToWindow() {
        DisplayMetrics metrics = getContext().getResources().getDisplayMetrics();
        int width = metrics.widthPixels;
        int height = metrics.heightPixels;
        getWindow().setLayout(width * 70 / 100, height * 30 / 100);
        super.onAttachedToWindow();
    }
    
  2. 注意:根据您的要求更改百分比

    或者

    1. 按照IntelliJ Amiya的建议进行当前对话

答案 1 :(得分:0)

对于 RESPONSIVE 案例,

试试这种方式,

DisplayMetrics metrics = getResources().getDisplayMetrics();
    int width = metrics.widthPixels;
    int height = metrics.heightPixels;
    final Dialog dialog = new Dialog(YourActivity.this);
    dialog.getWindow().setLayout((int) (width*85 / 100), (int) (height*35 / 100));

答案 2 :(得分:0)

将此代码放在 OnCreate()方法中: -

DisplayMetrics displaymetrics = new DisplayMetrics();
        getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);
        int width = displaymetrics.widthPixels - 
common.convertDpToPixel(60, this);
        Log.i("widthval", "width" + width);
        getWindow().setLayout(width, ViewGroup.LayoutParams.WRAP_CONTENT);
        getWindow().setGravity(Gravity.CENTER);

这是一个“ convertDpToPixel ”方法声明到您的公共文件中: -

 public static int convertDpToPixel(int dp, Context context) {
        Resources resources = context.getResources();
        DisplayMetrics metrics = resources.getDisplayMetrics();
        int px = dp * ((int) metrics.densityDpi / DisplayMetrics.DENSITY_DEFAULT);
        return px;
    }

我推了60-dp,但你可以根据自己的要求进行更改。

希望这会对你有所帮助。