android 改变app亮度不影响系统亮度(获取系统亮度)

本文介绍如何在Android应用中改变app的亮度而不影响系统全局亮度。通过使用 SeekBar 控件,实现在退出应用时亮度恢复到系统初始值,再次打开时亮度保持之前设置。文章提供相关代码示例,包括布局文件、样式文件和主Activity的实现,并在onStop()中保存亮度设置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在做改变亮度的时候基本都是改变系统的亮度,那如何改变app亮度又不影响系统亮度呢?在app上改变亮度后,退出app亮度恢复成系统原先的亮度,但是在次进入app的时候,亮度还要恢复成app当初设置的亮度。
需要demo的拉倒底部可以下载。
代码:
布局文件
activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <SeekBar
        android:id="@+id/seekBar1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        style="@style/Widget.SeekBar.Normal"
        android:layout_marginTop="124dp" />

</RelativeLayout>

values文件夹下的style文件
style.xml

<style name="Widget.SeekBar.Normal"  parent="@android:style/Widget.SeekBar">
        <item name="android:maxHeight">8.0dip</item>
        <item name="android:indeterminateOnly">false</item>
        <item name="android:indeterminateDrawable">@android:drawable/progress_indeterminate_horizontal</item>
        <item name="android:progressDrawable">@drawable/seekbar_horizontal</item>
        <item name="android:minHeight">8.0dip</item>
        <item name="android:thumb">@drawable/seek_thumb</item>
        <item name="android:thumbOffset">10.0dip</item>
    </style>

在res文件夹下创建一个drawable文件夹,里面放:
seekbar_horizontal.xml

<?xml version="1.0" encoding="UTF-8"?>
<layer-list
  xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@android:id/background" android:drawable="@drawable/seek_bkg" />
    <item android:id="@android:id/secondaryProgress">
        <clip>
            <shape>
                <corners android:radius="2.0dip" />
                <gradient android:startColor="#80ffd300" android:endColor="#a0ffcb00" android:angle="270.0" android:centerY="0.75" android:centerColor="#80ffb600" />
            </shape>
        </clip>
    </item>
    <item android:id="@android:id/progress">
        <clip android:drawable="@drawable/seek" />
    </item>
</layer-list>

主activity
MainActivity.java

package com.example.liangdu;

import android.app.Activity;
import android.content.ContentResolver;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.os.Bundle;
import android.provider.Settings;
import android.provider.Settings.SettingNotFoundException;
import android.view.Window;
import android.view.WindowManager;
import android.widget.SeekBar;

public class MainActivity extends Activity {

    private SeekBar seekBar;
    private SharedPreferences shared = null;
    private int num=0;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        seekBar = (SeekBar) findViewById(R.id.seekBar1);
        shared=getSharedPreferences("base64",MODE_PRIVATE);
        num=shared.getInt("seekBarNum", 0);
        changeAppBrightness(num);
        seekBar.setProgress(num);
        seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {

            @Override
            public void onStopTrackingTouch(SeekBar seekBar) {
                // TODO Auto-generated method stub
                /* 结束 */
            }

            @Override
            public void onStartTrackingTouch(SeekBar seekBar) {
                // TODO Auto-generated method stub
                /* 开始 */
            }

            @Override
            public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
                // TODO Auto-generated method stub
                changeAppBrightness(seekBar.getProgress());
            }
        });
    }

    // 获取系统屏幕亮度
    public int getScreenBrightness() {
        int value = 0;
        ContentResolver cr = getContentResolver();
        try {
            value = Settings.System.getInt(cr, Settings.System.SCREEN_BRIGHTNESS);
        } catch (SettingNotFoundException e) {

        }
        return value;
    }

    // 获取app亮度
    public void changeAppBrightness(int brightness) {
        Window window = getWindow();
        WindowManager.LayoutParams lp = window.getAttributes();
        lp.screenBrightness = (brightness <= 0 ? 1 : brightness) / 255f;
        window.setAttributes(lp);
    }

    @Override
    protected void onStop() {
        // TODO Auto-generated method stub
        super.onStop();
        Editor editor=  shared.edit();
        editor.clear();
        editor.putInt("seekBarNum", seekBar.getProgress());
        editor.commit();
    }

}

Editor 保存操作我是放在了生命周期onStop()方法里,因为每次退出都要保存当前seekBar的值。
源码demohttp://download.csdn.net/detail/qq_17299423/9527147

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值