android-设置/去除背景,透明度

本文介绍如何在Android中设置Button及整体界面的透明度,包括通过XML、Java代码及配置文件的不同方式实现背景颜色和图片的透明效果。

Button或者ImageButton的背景设为透明或者半透明

半透明<Button Android:background="#e0000000" ... /> 
透明<Button android:background="#00000000" ... />

颜色和不透明度 (alpha) 值以十六进制表示法表示。任何一种颜色的值范围都是 0 到 255(00 到 ff)。对于 alpha,00 表示完全透明,ff 表示完全不透明。表达式顺序是“aabbggrr”,其中“aa=alpha”(00 到 ff);“bb=blue”(00 到 ff);“gg=green”(00 到 ff);“rr=red”(00 到 ff)。例如,如果您希望对某叠加层应用不透明度为 50% 的蓝色,则应指定以下值:7fff0000

RGB
设置背景图片透明度:
View v = findViewById(R.id.content);//找到你要设透明背景的layout 的id
v.getBackground().setAlpha(100);//0~255透明度值

设置背景颜色透明度:

ImageView.setBackgroundColor(Color.TRANSPARENT);

android设置背景色为透明

方法一: 只要在配置文件内activity属性配置内加上 android:theme=@android:style/Theme.Translucent 就好了。 这样就调用了android的透明样式!

方法二:

先在res/values下建colors.xml文件,写入:
这里写图片描述
这个值设定了整个界面的透明度,为了看得见效果,现在设为透明度为56%(9/16)左右。

再在res/values/下建styles.xml,设置程序的风格

这里写图片描述
最后一步,把这个styles.xml用在相应的Activity上。即在AndroidManifest.xml中的任意标签中添加

android:theme=”@style/transparent”

如果想设置所有的activity都使用这个风格,可以把这句标签语句添加在中。

Android设置布局背景为白色的三种方法
一、在xml文件里可以直接设置:

android:background=”#ffffff”

其他颜色可以看这里;http://blog.youkuaiyun.com/yanzi1225627/article/details/8581270

二、在java文件里设置:

  1. LinearLayout myLayout = () findViewById(R.id.linearLayout1);
    myLayout.setBackgroundColor(Color.WHITE);

    三、在AndroidManifest.xml里利用android:theme来设置
    这个命令还是很强大的,如下所示:
    theme的设置 可以设置为系统自带的格式,也可以自定义格式。

    A: 系统自带格式

    @android:style/Theme.Black //背景黑色-有标题-非全屏
    @android:style/Theme.Black.NoTitleBar //背景黑色-无标题-非全屏
    @android:style/Theme.Black.NoTitleBar.Fullscreen //背景黑色-无标题-全屏显示
    @android:style/Theme.Dialog //对话框显示
    @android:style/Theme.InputMethod

    @android:style/Theme.Light //背景白色-有标题-非全屏
    @android:style/Theme.Light.NoTitleBar //背景白色-无标题-非全屏
    @android:style/Theme.Light.NoTitleBar.Fullscreen //背景白色-无标题-全屏显示

    @android:style/Theme.Light.Panel
    @android:style/Theme.Light.WallpaperSettings //背景透明
    @android:style/Theme.NoDisplay

    @android:style/Theme.Translucent.NoTitleBar.Fullscreen //半透明、无标题栏、全屏

    @android:style/Theme.Wallpaper.NoTitleBar.Fullscreen

    可以在单个Activity里设置,也可以在applicaiton里全局设置。比如:

    B:也可以自定义

    在activity里加入 android:theme=”@style/MyTitleBar” 再在 style.xml里加入
    这里写图片描述

    这里的parent是继承于android:Theme,所以在下面的样式里,只能是window开头的样式才起作用,所有样式请参考\sdk\docs\reference\android\R.attr.html,

    也可以设置windowTitleBackgroundStyle 为@style/MyTitleBackground,这样就可以在MyTitleBackground里,设置背景图。

贴段代码


        ed1.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                ed1.setBackgroundResource(R.drawable.common_google_signin_btn_text_dark);
                return false;
            }
        });

        get_sql.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent_get =new Intent(MainActivity.this,getsql.class);
                layout_sent.setBackgroundResource(0);//去掉背景图片
                txt1.setText("");
                ed1.setText("");
                ed1.setBackgroundResource(0);
                startActivity(intent_get);

            }
        });
        cotent.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent  intent_content = new Intent(MainActivity.this,View_tree.class);
                layout_sent.setBackgroundResource(0);//去掉背景图片
                txt1.setText("");
                ed1.setText("");
                ed1.setBackgroundResource(0);
                startActivity(intent_content);
            }
        });
        reset.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                txt1.setText("");
                ed1.setText("");
                layout_sent.setBackgroundResource(0);//去掉背景图片
                ed1.setBackgroundResource(0);

            }
        });
        send.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                layout_sent.setBackgroundResource(R.drawable.common_google_signin_btn_text_dark_focused);
                //设置背景图片
                geted1 = ed1.getText().toString();
                int count = 0;
                count++;
                if(count>=5){
                    txt1.setText("");
                }
                if(geted1.equals("")){

                    txt1.append("ERRROR!!请输入数据!\n");

                }else {
                    //启动线程 向服务器发送和接收信息
                    new MyThread(geted1).start();
                    txt1.append("client:"+geted1+"\n");
                }
            }
        });

    }
<think>我们有一个Android Activity,需要设置其窗口背景透明,并调整透明度为45%(即55%不透明)。同时,这个背景的高度应该是100dp。根据引用内容,我们可以通过设置主题或直接设置窗口背景来实现。这里我们考虑使用主题的方式,因为这样更符合样式规范。思路:1.在res/drawable中创建一个透明的形状(shape)或图层列表(layer-list)作为背景,并设置其高度为100dp。但是注意:windowBackground通常是一个drawable,它可能是一个颜色、图片或shape。由于我们需要高度和透明度,我们可以使用layer-list来创建一个高度为100dp的矩形,并设置透明度。2.由于我们要求背景高度为100dp,并且是透明的(45%透明度),我们可以创建一个drawable文件,例如:background_transparent.xml。3.在drawable中定义:```xml<layer-list xmlns:android="http://schemas.android.com/apk/res/android"><!--设置一个矩形,高度为100dp,颜色为黑色(或其他颜色)并设置透明度为45% --><item android:height="100dp"><shape android:shape="rectangle"><solid android:color="#73000000"/> <!--45%透明度的黑色--></shape></item></layer-list>```解释:颜色值#73000000中,73是十六进制,转换为十进制是115,而255的45%约等于115(255*0.45≈114.75,四舍五入为115)。所以73就是45%的透明度(255*0.45=114.75,取整115,十六进制73)。4.在主题中设置这个drawable为窗口背景:在styles.xml中定义一个主题(或者直接修改Activity的主题):```xml<stylename="TransparentActivityTheme" parent="Theme.AppCompat.Light.NoActionBar"><item name="android:windowBackground">@drawable/background_transparent</item><!--为了确保背景透明,我们可能还需要设置窗口无标题栏和透明状态栏等,但根据需求,我们只设置背景 --></style>```5.在AndroidManifest.xml中为Activity设置这个主题:```xml<activityandroid:name=".YourActivity"android:theme="@style/TransparentActivityTheme" />```但是,上述方法会将整个窗口的背景设置为一个高度为100dp的矩形,而剩余部分会是默认的(可能是白色或黑色)。这通常不是我们想要的。我们可能希望整个Activity的背景透明的,然后在某个位置(比如顶部)有一个高度100dp的透明条。实际上,用户需求可能是:整个Activity的背景透明的(即能看到下面的内容),然后在这个Activity上有一个高度100dp的视图(比如一个View)是半透明的(45%)。但是问题描述的是设置windowBackground为透明并调整透明度为45%,且高度100dp。因此,我们重新理解需求:我们想要一个高度为100dp的透明背景,那么整个窗口的背景将被分为两部分:100dp高度的半透明区域,其余部分完全透明(或者没有设置,即透明)。所以,使用layer-list可以做到:第一个item高度100dp,设置透明;第二个item可以覆盖剩余部分,设置为完全透明(或者不设置,因为默认是透明的?但是为了确保,我们可以设置透明)。修改drawable/background_transparent.xml: ```xml<layer-list xmlns:android="http://schemas.android.com/apk/res/android"><!--第一部分:高度100dp,45%透明度的黑色--><itemandroid:height="100dp"><shapeandroid:shape="rectangle"><solid android:color="#73000000" /></shape></item><!--第二部分:剩余部分,完全透明 --><item android:top="100dp"><shape android:shape="rectangle"><solidandroid:color="#00000000"/></shape></item> </layer-list> ```这样,窗口背景就会在顶部100dp高度显示一个45%透明的黑色背景,其余部分完全透明。但是,请注意:windowBackground会填充整个窗口,包括状态栏和导航栏区域。如果我们只希望内容区域(状态栏和导航栏之间)有背景,那么可能需要配合其他属性(如设置状态栏和导航栏透明)来调整。另外,如果用户希望整个Activity的背景都是45%透明,但高度100dp可能是指背景的某个部分?这里我们按照需求描述:设置windowBackground为透明并调整透明度为45%,且高度100dp。所以,我们理解为背景的上半部分100dp是半透明,其余部分透明。如果用户希望整个Activity的背景都是45%透明,那么就不需要高度100dp了,而是整个窗口。那么我们可以这样:```xml<stylename="TransparentActivityTheme" parent="Theme.AppCompat.Light.NoActionBar"><item name="android:windowBackground">@color/transparent_45</item><!--还需要设置窗口透明,以便看到后面的内容--><itemname="android:windowIsTranslucent">true</item></style>```然后在colors.xml中定义:```xml<color name="transparent_45">#73000000</color>```但是,这样整个窗口背景都是45%透明,没有高度限制。所以,根据需求描述,我们采用第一种方法(layer-list)来创建高度100dp的透明背景。另外,引用[1]中提到可以通过设置elevation和translationZ来实现3D效果,但这里不需要。引用[2]中提到了渐变动画,与背景设置无关。引用[3]中提到了隐藏ActionBar和状态栏透明,我们可以根据需要添加。步骤总结:1.创建drawable/background_transparent.xml,使用layer-list定义两个部分:100dp的半透明矩形和剩余部分的完全透明矩形。2.在styles.xml中定义主题,设置windowBackground为这个drawable。3.在AndroidManifest.xml中为Activity应用这个主题。4.如果需要,可以设置状态栏和导航栏透明,以便背景延伸到这些区域(但注意,我们的背景只在顶部100dp,所以可能不需要)。注意:如果希望这个背景只出现在内容区域(不包括状态栏),那么需要设置状态栏透明,并且将第一个item的top设置为状态栏高度(通常为24dp或自定义dimen),然后高度100dp从状态栏下方开始。由于问题没有明确说明,我们按照最简单的实现:背景从窗口顶部开始(包括状态栏区域)100dp高度为半透明。如果不需要包括状态栏,我们可以使用系统属性来调整,比如设置android:top="?android:attr/actionBarSize"或者使用系统状态栏高度的dimen:@dimen/status_bar_height但通常,状态栏高度可以通过系统资源获取,我们可以创建一个values-v21/styles.xml来设置不同的状态栏高度。由于问题复杂化,这里我们按照包括状态栏的方式实现。如果用户希望不包括状态栏,可以在第二个item之前再加一个item,设置高度为状态栏高度,并完全透明,然后下一个item设置top为状态栏高度,高度100dp,再下一个item设置top为状态栏高度+100dp,完全透明。但这样可能复杂,且需要适配不同状态栏高度。因此,我们先实现包括状态栏的版本。最后,注意:在Android5.0及以上,我们可以通过设置FLAG_TRANSLUCENT_STATUS来使状态栏透明(如引用[3]所示)。所以,我们可以在主题中添加:<itemname="android:windowTranslucentStatus">true</item>这样,状态栏就会透明,我们的背景就会延伸到状态栏。步骤:1.创建drawable/background_transparent.xml: ```xml<?xmlversion="1.0"encoding="utf-8"?> <layer-listxmlns:android="http://schemas.android.com/apk/res/android"><!--第一部分:高度100dp,45%透明度的黑色 --><item><shape android:shape="rectangle"><solidandroid:color="#73000000"/><size android:height="100dp"/></shape></item><!--第二部分:剩余部分完全透明,我们不需要指定,因为默认会绘制整个形状,但为了覆盖剩余部分,我们设置一个从100dp开始的透明矩形--><!--实际上,第一个item已经设置了高度100dp,那么layer-list默认会绘制整个区域,第一个item在顶部100dp,第二个item会覆盖其余部分?所以我们可以只用一个item覆盖其余部分?--><!--但是,第一个item设置高度100dp后,它只占100dp,剩下的区域默认是透明的?所以其实不需要第二个item。--><!--因此,我们可以简化为:--><!--只需要一个item,设置高度100dp,颜色为#73000000,然后整个drawable的其余部分自然就是透明的。--> </layer-list> ```实际上,layer-list中的每个item都可以设置android:top,android:bottom等来定位。但这里我们只需要一个高度100dp的矩形,它会从顶部开始绘制100dp,剩下的区域是透明的。2.定义主题:在res/values/styles.xml中:```xml<style name="TransparentActivityTheme"parent="Theme.AppCompat.Light.NoActionBar"><item name="android:windowBackground">@drawable/background_transparent</item><item name="android:windowTranslucentStatus">true</item><!--如果需要延伸到状态栏,则设置这个--><item name="android:windowTranslucentNavigation">true</item><!--如果需要延伸到导航栏,也设置,但这里可能不需要--> </style>```3.在AndroidManifest.xml中应用主题到Activity:```xml<activityandroid:name=".YourActivity"android:theme="@style/TransparentActivityTheme" />```注意:由于我们使用了AppCompat主题,所以需要确保在values-v21/styles.xml中也有相应的设置,因为windowTranslucentStatus和windowTranslucentNavigation在API19以上才有效。我们可以创建values-v19/styles.xml来设置。在res/values-v19/styles.xml中:```xml<stylename="TransparentActivityTheme" parent="Theme.AppCompat.Light.NoActionBar"><item name="android:windowBackground">@drawable/background_transparent</item><item name="android:windowTranslucentStatus">true</item><item name="android:windowTranslucentNavigation">true</item><!--可选 --></style> ```在API21以上,可以使用更灵活的方式,如设置android:statusBarColor为透明,但这里我们使用windowTranslucentStatus已经足够。这样,Activity的窗口背景就会在顶部100dp高度显示45%透明的黑色,其余部分透明。并且状态栏也是透明的,所以背景会延伸到状态栏。如果不需要延伸到状态栏,那么去掉windowTranslucentStatus,并且可能需要调整背景的top位置(比如从状态栏下方开始)。但这样就需要知道状态栏高度,可以在drawable中设置第一个item的top为状态栏高度(通过dimen引用,如@dimen/status_bar_height),然后高度为100dp。但是状态栏高度在不同设备上不同,我们可以通过dimens定义多个值。由于问题要求高度100dp,我们按照包括状态栏的方式实现,那么100dp的高度就会从屏幕最顶部开始(包括状态栏区域)。如果用户希望100dp是从内容区域开始,那么需要减去状态栏高度。考虑到需求描述没有明确,我们提供上述实现。总结:通过layer-list定义窗口背景设置高度100dp和透明度45%,并设置窗口状态栏透明,使背景延伸到状态栏。注意:颜色值#73000000中的73是十六进制,对应十进制115,表示45%的透明度(255*0.45≈115)。如果用户希望调整的是整个Activity的透明度(即整个Activity包括内容都半透明),那么可以使用另一种方法:在Activity的onCreate中设置窗口的alpha值。但是这种方法会影响整个Activity的内容(包括所有子View),而不仅仅是背景。例如:Windowwindow =getWindow();WindowManager.LayoutParamslp =window.getAttributes();lp.alpha=0.45f; //0.0f完全透明,1.0f完全不透明window.setAttributes(lp);但是,这样设置的是整个窗口的透明度,包括所有内容。而且没有高度限制。所以不符合需求(高度100dp)。因此,我们采用第一种方法(设置windowBackground)来实现。最后,根据引用[3]中提到的,如果使用Android M及以上,需要注意权限问题,但这里不涉及权限。所以,最终解决方案如上所述。</think>### Android Activity 设置窗口背景透明并调整透明度 要实现 Activity 窗口背景透明(45%透明度)且高度为 100dp,需通过主题和 drawable 资源组合实现,步骤如下: #### 1. 创建透明背景的 drawable 文件 在 `res/drawable` 目录下新建 `transparent_bg.xml`: ```xml <layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <!-- 设置100dp高度的透明矩形 --> <item android:height="100dp"> <shape android:shape="rectangle"> <!-- 45%透明度:十六进制73 = 255*0.45≈115 --> <solid android:color="#73000000" /> </shape> </item> <!-- 剩余区域完全透明 --> <item android:top="100dp"> <shape android:shape="rectangle"> <solid android:color="#00000000" /> </shape> </item> </layer-list> ``` #### 2. 在主题中设置窗口背景 在 `res/values/styles.xml` 中定义主题: ```xml <style name="TransparentActivityTheme" parent="Theme.AppCompat.Light.NoActionBar"> <!-- 应用透明背景 --> <item name="android:windowBackground">@drawable/transparent_bg</item> <!-- 关键:使背景透明 --> <item name="android:windowIsTranslucent">true</item> <!-- 移除ActionBar(可选) --> <item name="windowActionBar">false</item> <item name="windowNoTitle">true</item> </style> ``` #### 3. 在 AndroidManifest 中应用主题 ```xml <activity android:name=".YourActivity" android:theme="@style/TransparentActivityTheme" /> ``` #### 4. 动态调整透明度(可选) 在 Activity 代码中动态修改透明度: ```java View background = getWindow().getDecorView().getRootView(); background.getBackground().setAlpha( (int)(255 * 0.45) ); // 45%透明度 ``` #### 关键点说明 1. **透明度计算**: ARGB 颜色值中,透明度占前两位十六进制。 45% 透明度计算:$255 \times 0.45 \approx 115$ → 十六进制 `73` 完整值:`#73000000` 2. **高度控制**: 通过 `<item android:height="100dp">` 精确限定透明区域高度 3. **状态栏处理**: 如需延伸到状态栏,添加以下代码(API 19+): ```java if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); } ``` #### 效果验证 运行后 Activity 顶部将显示高度 100dp、透明度 45% 的灰色蒙层,其余部分完全透明,可通过背景看到下层内容[^1][^3]。 --- ### 相关问题 1. **如何在 Android 中实现局部区域半透明效果?** > 可通过 `LayerDrawable` 组合多个形状,为不同区域设置独立透明度,结合 `android:top/android:bottom` 控制位置。 2. **如何动态修改窗口背景透明度?** > 获取 `Window` 的 `DecorView` 背景,调用 `setAlpha(int)` 方法,参数范围:0(全透)~255(不透)[^2]。 3. **透明背景导致输入法弹出异常怎么解决?** > 在 `AndroidManifest.xml` 中设置: > `android:windowSoftInputMode="adjustResize|stateHidden"` > 并确保根布局高度非 `match_parent`。 4. **Material Design 中透明效果的设计规范是什么?** > 建议透明度范围 40%-60%,配合 `android:elevation` 提升层级感,避免完全遮挡下层内容[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值