我设计了使用JPEG图像作为布局背景的屏幕。完整的UI屏幕在Android 8( GingerBread )到Android 19( Kitkat )中正确显示。 Android 20 +( Lollipop )
中无法显示布局背景我正在使用应用兼容性库。
请参阅下面的屏幕截图
Emulator Android 8
Device Kitkat
设备Lollipop
已尝试解决方案
@mipmap\image_background
访问它。 没有任何改变。布局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:提及支持库的使用
答案 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文件夹中并将其设置为视图的背景。如果不喜欢图像在整个设备上的外观,那么只需将其放回普通的可绘制文件夹即可。 除非您随机更改背景图像,否则在运行时手动调整位图大小可能会很昂贵。