Android 常用控件问题解决方法

这篇博客详细介绍了Android中遇到的各种控件问题及其解决方法,包括ImageView的src和background设置,dimens.xml中保存无单位数值,TextView的marquee效果,自定义Dialog背景,ScrollView与WebView的焦点问题,以及按钮、EditText的交互处理等,涵盖了许多实用的Android UI开发技巧。
摘要由CSDN通过智能技术生成

1. 用代码设置ImageView的src和background

设置ImageView的src:

setImageDrawable(Drawable drawable);
setImageBitmap(Bitmap bm);
setImageResource(int resId);

代码设置ImageView的background:

setBackgroundReource(int resid)
setBackground(Drawable background)
setBackgroundColor(int color)
setBackgroundDrawable(Drawable background) //This method was deprecated in API level 16. use setBackground(Drawable) instead

2. 在dimens.xml中保存不带单位的数值

要在dimens.xml中保存不带单位的数值,可以用如下格式来定义。

<item name="text_line_spacing" type="dimen" format="float">1.2</item>

在上述定义中,type=”dimen”属性表示定义的item的资源类型是dimen类型。除了可以使用”dimen”外,还可以使用color,string,style等类型,但由于其他类型都可以直接定义,且没有数值的约束,所以一般不需要通过这种方法来定义。format=”float”属性表示定义的数值类型是float类型。除了”float”类型外,还可以使用boolean,fraction,integer等类型。例如:

<item name="top_weight" type="dimen" format="integer">5</item>

要在xml中引用上述定义的dimens,可以使用@dimen/text_line_spacing。
要在代码中引用上述定义的dimens,可以使用如下代码。

TypedValue outValue = new TypedValue();
getResources().getValue(R.dimen.text_line_spacing, outValue, true);
float value = outValue.getFloat();

3. 在TextView中android:ellipsize="marquee"确保有效的方法

  • xml设置
            android:singleLine="true"
            android:ellipsize="marquee"
            android:marqueeRepeatLimit="marquee_forever"
  • 文字动态设置的话需要超出一行
  • 在当前控件是visible的情况下textView.setSelected(true);

4. Android自定义Dialog设置有蒙版半透明背景的方法

<item name="android:backgroundDimEnabled">true</item>
<item name="android:backgroundDimAmount">0.42</item>

5. ScrollView中嵌套WebView时的焦点问题(ListView的item焦点抢夺同理)

外层使用ScroolView,内层嵌套使用WebView,每次进入Activity页面时,整个页面起始位置并不是顶部,这是因为WebView加载后获得焦点导致的(ListView也会出现类似问题,即使修正了高度,也会主动获得焦点,使得屏幕产生错误的滚动)
通过设置ScrollView包含的第一个viewgroup的

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:descendantFocusability="blocksDescendants" >

viewgroup会覆盖子类控件而直接获得焦点来轻松解决问题。

6. 设置按钮不可点击

button.setEnabled(false);
或者
button.setClickable(false);
  • 注意:
    setClickable(false)方法一定要在setOnClickListener()方法之后用;
    因为setOnClickListener()方法会重新绘制View;

7. 编辑框光标保持光标位于内容最后

setText之后设置:

etView.requestFocus();

否则先获得了焦点,后续再设置内容,此时焦点肯定是放在内容之前的了,则就需要额外调用setSelection去调整位置了

etView.setSelection(etView.getText().toString().length());

8. ImageView扩大点击区域

ImageView 直接设置其padding值达到目的,或者

android:scaleType="centerInside"
android:src="@drawable/ic_edit"

此时可以直接设置控件宽高来控制大小,注意不能用backgr

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值