随时更改方向即可更改样式

时间:2018-09-25 19:18:07

标签: java android android-layout android-styles

我为每个方向制作了两个样式文件,如下图所示,

img1

但是问题是,当我翻转手机(例如,将方向更改为横向)时,我什么都没改变,我尝试在setContentView()方法内使用onConfigurationChanged方法,但没有达到我想要的

这是我的布局:

img2

1-默认样式:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <!-- Customize your theme here. -->
    </style>

    <style name="ExoMediaButton">
        <item name="android:scaleType">centerCrop</item>
    </style>

    <style name="ExoMediaButton.Previous">
        <item name="android:visibility">gone</item>
    </style>

    <style name="ExoMediaButton.Next">
        <item name="android:visibility">gone</item>
    </style>

    <style name="ExoMediaButton.Play">
        <item name="android:src">@drawable/ic_play_button</item>
    </style>

    <style name="ExoMediaButton.Pause">
        <item name="android:src">@drawable/ic_pause</item>
    </style>

    <style name="ExoMediaButton.FastForward">
        <item name="android:src">@drawable/ic_fast_forward</item>
    </style>

    <style name="ExoMediaButton.Rewind">
        <item name="android:src">@drawable/ic_fast_forward_back</item>
    </style>

</resources>

2-纵向样式:

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <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="listStyle">
        <item name="android:layout_height">221dp</item>
        <item name="android:layout_width">match_parent</item>
    </style>

    <style name="videoPlayerStyle">
        <item name="android:layout_width">match_parent</item>
        <item name="android:layout_height">216dp</item>
        <item name="android:layout_marginStart">8dp</item>
        <item name="android:layout_marginEnd">8dp</item>
        <item name="android:layout_marginTop">8dp</item>
    </style>


</resources>

3-代表风景:

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
        <item name="android:windowNoTitle">true</item>
        <item name="android:windowActionBar">false</item>
        <item name="android:windowFullscreen">true</item>
        <item name="android:windowContentOverlay">@null</item>
    </style>

    <style name="listStyle">
        <item name="android:layout_height">0dp</item>
        <item name="android:visibility">gone</item>
    </style>

    <style name="adsStyle">
        <item name="android:visibility">gone</item>
    </style>

    <style name="videoPlayerStyle">
        <item name="android:layout_width">match_parent</item>
        <item name="android:layout_height">match_parent</item>
        <item name="android:layout_marginStart">0dp</item>
        <item name="android:layout_marginEnd">0dp</item>
        <item name="android:layout_marginTop">0dp</item>
    </style>

</resources>

有人可以给我们一些建议或帮助我吗?

2 个答案:

答案 0 :(得分:0)

检查清单文件中的活动是否已指定configChanges =“ orientation”。

<activity android:name=".MyActivity"
      android:configChanges="orientation"
      android:label="@string/app_name">

答案 1 :(得分:0)

尝试这样的事情:

步骤1:添加一个宽度设置为guideline的{​​{1}}并为其指定一个match_parent,然后:

id

说明::此代码写在按钮 binding.btnFullScreen.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (binding.imgFullScreen.getVisibility() == View.VISIBLE) { setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); new Handler().postDelayed(new Runnable() { @Override public void run() { ... ConstraintLayout.LayoutParams lp = (ConstraintLayout.LayoutParams) binding.guideline6.getLayoutParams(); lp.guidePercent = 1; ... } }, 300); } else if (binding.imgNormalScreen.getVisibility() == View.VISIBLE) { setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); new Handler().postDelayed(new Runnable() { @Override public void run() { .... ConstraintLayout.LayoutParams lp = (ConstraintLayout.LayoutParams) binding.guideline6.getLayoutParams(); lp.guidePercent = 0.4f; .... } }, 300); } } }); 内。我将视频播放器的宽度和高度设置为match_parent,直到达到我的指导原则。因此,代码onClick()意味着该准则将到达屏幕的末尾,从而使视频播放器进入全屏状态,而类似的lp.guidePercent = 1;则意味着该准则将到达屏幕的40%,从而使其变得更小,如您在代码中所见,因此,我正在设置方向。

我不知道这是否对您有用,但这就是我的做法。