Android Lollipop没有显示android:background image

时间:2015-09-09 13:45:23

标签: android android-layout android-5.0-lollipop

我设计了使用JPEG图像作为布局背景的屏幕。完整的UI屏幕在Android 8( GingerBread )到Android 19( Kitkat )中正确显示。 Android 20 +( Lollipop

中无法显示布局背景

我正在使用应用兼容性库

请参阅下面的屏幕截图

Emulator Android 8

screenshot of emulator android 8

Device Kitkat

kitkat screenshot

设备Lollipop

lollipop screenshot

已尝试解决方案

  1. 创建另一个文件夹 mipmap 并在那里复制相同的图片并尝试使用@mipmap\image_background访问它。 没有任何改变
  2. 布局XML

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        style="@style/mainBody"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent">
    <!-- android:background="@drawable/login_bg"  -->
        <View
            android:id="@+id/vwStruts"
            android:layout_width="0dp"
            android:layout_height="0dp"
            android:layout_centerInParent="true" />
    
    
        <TableLayout
            android:id="@+id/tblLogin"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_centerInParent="true"
            android:layout_margin="5dp"
            android:padding="5dp" >
    
            <TableRow
                android:id="@+id/tbrUserId"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginBottom="10dp"
                android:gravity="center" >
    
                <EditText
                    android:id="@+id/edtUserId"
                    style="@style/EditText"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_weight="1"
                    android:ems="10"
                    android:layout_marginLeft="5dp"
                    android:layout_marginRight="5dp"
                    android:hint="@string/hintEmpId" >
                    <requestFocus />
                </EditText>
            </TableRow>
    
            <TableRow
                android:id="@+id/tbrPassword"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginBottom="10dp"
                >
    
                <EditText
                    android:id="@+id/edtPassword"
                    style="@style/EditText"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_weight="1"
                    android:layout_marginLeft="5dp"
                    android:layout_marginRight="5dp"
                    android:ems="10"
                    android:hint="@string/hintPassword"
                    android:inputType="textPassword" />
    
            </TableRow>
    
            <TableRow
                android:id="@+id/tbrLoginAndClear"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:gravity="center" >
    
                <Button
                    android:id="@+id/btnLogin"
                    style="@style/LoginButton"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:minHeight="40dp"
                    android:layout_weight="1"
                    android:layout_marginLeft="5dp"
                    android:layout_marginRight="5dp"
                    android:text="@string/login" />
            </TableRow>
        </TableLayout>
    
        <ImageView
            android:id="@+id/imgLogo"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_above="@+id/tblLogin"
            android:layout_centerHorizontal="true"
            android:layout_marginBottom="@dimen/tblLoginMargin"
            android:src="@raw/footer_logo" />
    
    </RelativeLayout>
    

    styles.xml,值为-v21

    没有文件夹
     <resources xmlns:android="http://schemas.android.com/apk/res/android">
    
        <!--
            Base application theme, dependent on API level. This theme is replaced
            by AppBaseTheme from res/values-vXX/styles.xml on newer devices.
    
        -->
        <style name="AppBaseTheme" parent="Theme.AppCompat.Light">
            <!--
                Theme customizations available in newer API levels can go in
                res/values-vXX/styles.xml, while customizations related to
                backward-compatibility can go here.
    
            -->
        </style>
    
        <!-- Application theme. -->
        <style name="AppTheme" parent="AppBaseTheme">
            <!-- All customizations that are NOT specific to a particular API-level can go here. -->
        </style>
    
    </resources>
    

    登录按钮可绘制

    <?xml version="1.0" encoding="utf-8"?>
    <selector xmlns:android="http://schemas.android.com/apk/res/android">
    
        <!-- On Pressed state -->
        <item android:state_pressed="true" >
            <shape>
                <solid android:color="@color/btn_login_on_press" />         
            </shape>
    
         </item>
    
        <!-- enabled true Not pressed, normal state -->
        <item android:state_pressed="false" android:state_enabled="true">
             <shape>
                <solid android:color="@color/btn_login_normal" />           
            </shape>
        </item>
    
    </selector>
    

    编辑1:添加了Styles.xml和按钮drawables 编辑2:提及支持库的使用

4 个答案:

答案 0 :(得分:3)

将此主题用于manifest.xml

中的活动
<style name="AppTheme" parent="Theme.AppCompat.Light">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/primaryColor</item>
        <item name="colorPrimaryDark">@color/primaryColor</item>
        <item name="colorAccent">@color/primaryColor</item>
        <item name="windowActionBar">false</item>
        <item name="windowNoTitle">true</item>
        <item name="android:textColorPrimary">@android:color/white</item>
        <item name="actionMenuTextColor">@android:color/holo_blue_dark</item>
        <item name="android:actionMenuTextColor">@android:color/holo_blue_dark</item>
        <item name="android:windowBackground">@android:color/white</item>
        <item name="android:screenOrientation">portrait</item>
    </style>

并且针对上述API 21在res/values-v21中使用此创建文件夹并使用以下主题

<style name="AppTheme" parent="Theme.AppCompat.Light">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/primaryColor</item>
        <item name="colorPrimaryDark">@color/primaryColor</item>
        <item name="colorAccent">@color/primaryColor</item>
        <item name="android:textColorPrimary">@android:color/white</item>
        <item name="android:navigationBarColor">@android:color/black</item>
        <item name="actionMenuTextColor">@android:color/holo_blue_dark</item>
        <item name="android:actionMenuTextColor">@android:color/holo_blue_dark</item>
        <item name="android:windowDrawsSystemBarBackgrounds">true</item>
        <item name="android:statusBarColor">@android:color/black</item>
        <item name="windowActionBar">false</item>
        <item name="windowNoTitle">true</item>
        <item name="android:windowBackground">@android:color/white</item>
        <item name="android:windowContentTransitions">true</item>
        <item name="android:screenOrientation">portrait</item>
    </style>

答案 1 :(得分:2)

mipmap文件夹的目的是让android启动器能够选择不同的分辨率。所以把你的图像放回到drawable文件夹中。将图像放在背景中的最佳位置就像this一样。主要思想是将您的背景图层设置为登录活动的窗口资源。

答案 2 :(得分:2)

经过长时间的测试和试用,我终于意识到..代码或xml或样式或主题设置没有任何问题。

问题堆栈中的小针是“防止位图太大而无法上传到纹理android”

原因是,在屏幕OpenGLRenderer 上呈现图片时未加载高分辨率 设备的位图,因此nexus设备上没有图像。

我使用的工作是在onCreate()方法中手动调整位图的大小并设置为布局的背景。

希望对无法加载背景的人有所帮助。

随意查询更多!!

答案 3 :(得分:0)

除了以编程方式调整位图大小之外,快速解决此问题的方法是从外部调整位图大小并将其放在v21 res文件夹中并将其设置为视图的背景。如果不喜欢图像在整个设备上的外观,那么只需将其放回普通的可绘制文件夹即可。 除非您随机更改背景图像,否则在运行时手动调整位图大小可能会很昂贵。