setBackgroundResource导致Padding失效,settextsize

本文讨论了在使用9patch图片作为背景时,如何避免padding失效的问题,并提供了调整TextView字体大小的正确方法,确保配置在不同设备上的一致性。
通过setBackground设置9 patch图的时候会重置padding。这个时候需要在setBackground之前调用getPadding方法获取未重置之前的padding,然后在调用setBackground之后用代码重新设置Padding。

/**
* 代码中设置background后会导致padding失效
* @param rl
*/
private void setRlPadding(RelativeLayout rl) {
int top = rl.getPaddingTop();
int bottom = rl.getPaddingBottom();
int left = rl.getPaddingLeft();
int right = rl.getPaddingRight();
rl.setBackgroundResource(R.drawable.hive_journey_bg);
rl.setPadding(left,top,right,bottom);
}

只有在背景图是.9的时候会出现这种情况,其他时候并没有遇到。

还有一个小细节在这里顺便记录一下,很多同学发现通过TextView的setTextSize方法设置的字体大小总是跟自己想的不一样。原因是settextSize的单位默认是dp,这个时候最先想到的做法就是直接setTextSize(10)这样写死,可是这样对与整个应用通用字体的配置造成麻烦,如果有天要改字体大小,这个textview很容易就漏掉。所以我们想把这个字体的size也放到配置文件里面,于是我们就要调用这个方法
titleTv.setTextSize(TypedValue.COMPLEX_UNIT_PX, getResources().getDimension(R.dimen.hive_textsize_1));

这个方法的第一个参数是规定这个size的类型,如dp或者px。关键在于第二个参数,通过
getResources().getDimension(R.dimen.hive_textsize_1)

这个方法拿到的尺寸其实就是系统转换好的,如果我们在配置文件中是这样写的
<dimen name="hive_textsize_1">16sp</dimen>
。那么通过getResources方法得到的大小就是根据屏幕密度换算后的,所以要想字体显示正常就必须设置size的类型是px。当然如果们定义的单位是px,这里自然就不会转换。
Android 中使用 `setBackgroundResource(R.drawable.shape_image)` 无效,可能由多种原因导致,以下是一些常见的解决办法: ### 检查资源文件 确保 `shape_image.xml` 文件位于 `res/drawable` 目录下,并且文件内容正确。以下是一个示例的 `shape_image.xml` 文件: ```xml <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <solid android:color="#FF5722" /> <corners android:radius="10dp" /> </shape> ``` ### 检查视图是否正确引用 确保在代码中正确引用了要设置背景的视图。例如: ```java import android.os.Bundle; import android.widget.LinearLayout; import androidx.appcompat.app.AppCompatActivity; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); LinearLayout layout = findViewById(R.id.layout); layout.setBackgroundResource(R.drawable.shape_image); } } ``` ### 检查布局文件中的属性冲突 如果在布局文件中已经为视图设置了背景属性,可能会与代码中的 `setBackgroundResource` 方法冲突。例如: ```xml <LinearLayout android:id="@+id/layout" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@android:color/white"> <!-- 这里的 android:background 可能会覆盖代码中的设置 --> </LinearLayout> ``` 需要移除布局文件中的 `android:background` 属性。 ### 检查代码执行时机 确保 `setBackgroundResource` 方法在视图已经初始化之后调用。通常在 `onCreate` 方法中调用是安全的,但如果在异步任务中调用,可能需要确保视图已经完全初始化。 ### 检查内存泄漏或视图重复创建 如果存在内存泄漏或视图重复创建的问题,可能会导致背景设置无效。确保在视图销毁时正确释放资源,并避免不必要的视图重复创建。 ### 强制刷新视图 在设置背景资源后,可以尝试强制刷新视图: ```java layout.invalidate(); layout.requestLayout(); ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值