前言:在平时的开发过程中,经常会不经意的发现一些之前不知道的常用控件的特殊方法从而让一些开发过程变得更加简单,比如textview的图片添加,之前实现这种功能我都是写一个textview和一个imageview,有了这个方法,方便了许多,这里就用来记录一些琐碎的好用的方法,或者常用某些方法需要注意的点,方便查阅。

textview

图片和文字组合

不用单独写textview和imageview,但是需要注意的是图片的大小不能调整

drawableRight控制图片位置

drawablePadding控制图片和文字的间距

android:id="@+id/tv_screen_searchresult"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:drawableRight="@drawable/sousuo_shaixuan"
android:drawablePadding="@dimen/dp1080_10"
android:padding="@dimen/dp1080_30"
/>

显示不同的样式html方法

通过解析html字符串

//不同颜色的测试
String s = "这是不同颜色测试黄色蓝色";
Spanned spanned = Html.fromHtml(s);
tv_price_searchresult.setText(spanned);
//不同颜色的测试 错误代码 没有添加结束字符 黄色和蓝色的字都会变成黄色
String s= "这是不同颜色测试黄色蓝色";
Spanned spanned = Html.fromHtml(s);
tv_price_searchresult.setText(spanned);
//加下划线
String difcolorString = "这是下划线测试下划线";
Spanned spanned = Html.fromHtml(difcolorString);
tv_price_searchresult.setText(spanned);

显示不同样式SpannableString方法

这个方法是在查找显示不同样式方法的时候找到的,以前没有发现过,最开始的时候文字大小不同甚至用的两个不同的textview,从这里看出,很多时候在做一个东西的时候,应该先考虑有没有更简单的方法

http://www.android100.org/html/201304/19/2207.html

文字占位符

做电商类app时,经常需要显示价格小数点后面两位,java自带的一些方法有时候不很好用,就可以用这样的方法来显示小数点后两位

xml:

书名 %1$s 作者 %2$s 编号 %3$d 价格 %4$.2f

//文字占位符使用
//返回值 :书名 java 作者 zero 编号 10000 价格 20.50
public String getBook(){
String book = getResources().getString(R.string.book);
String str = String.format(book, "java", "zero", 10000, 20.50);
return str;
}
edittext

搜索框使用

之前使用的singleLines但是被弃用,改成lines

android:imeOptions="actionSearch"让软键盘变成搜索

android:id="@+id/et_search_searchresult"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/dp1080_20"
android:layout_marginRight="@dimen/dp1080_10"
android:background="@null"
android:drawableLeft="@drawable/sousuo_search"
android:drawablePadding="@dimen/dp1080_20"
android:gravity="center_vertical"
android:hint="请输入要查询的产品名称"
android:imeOptions="actionSearch"
android:lines="1"
android:textSize="@dimen/sp1080_40" />
checkbox

变换点击样式

必须在最下面 button的selector也是如此,不然有可能无法实现点击效果

//改变样式 drawable 下 selector.xml

取消和选中监听

checkbox_mpati = (CheckBox) localView.findViewById(R.id.brlb_checkbox_mpati);
checkbox_mpati.setOnCheckedChangeListener(this);
@Override
public void onCheckedChanged(CompoundButton button, boolean isChecked) {
int id = button.getId();
switch (id) {
case R.id.brlb_checkbox_mpati:
if(isChecked){
//选中时操作
}else{
//取消选中时操作
}
break;
}
}

scrollview里面嵌套recyclerview显示不全

用NestedScrollView代替ScrollView作为最外层,如果发生滑动不流畅的情况,给recyclerview设置recyclerView.setNestedScrollingEnabled(false);即可,stackoverflow给了的另一个答案表示scrollview里面最好不要放置有滑动属性的控件,所以最好用recyclerview的多重布局解决,具体stackoverflow链接,可以再看看这个问题下面的其他答案http://stackoverflow.com/questions/27083091/recyclerview-inside-scrollview-is-not-working

增加水波纹效果

android:foreground="?android:attr/selectableItemBackground"

注意一下不是background而是foreground

自定义dialog点击按钮取消

注意:必须要创建alertdialog才行,用原来的build不行

这里解释一下为什么不能用build.create().dismiss();因为build是创造者模式,也就是说,在build.create()代码调用的时候,才会创建dialog,直接用build.create().dismiss();创建了一个dialog,后面build.show()又创建了一个dialog,相当于两个不同的dialog

private void showDialog(final Context context, final FriendzBean.FriendsListBean friendsListBean) {
final AlertDialog.Builder builder = new AlertDialog.Builder(context);
final AlertDialog alertDialog = builder.create();
View view = LayoutInflater.from(context).inflate(R.layout.dialog_addfriends, null, false);
TextView tv_back_addfriends = (TextView) view.findViewById(R.id.tv_back_addfriends);
tv_back_addfriends.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
alertDialog.dismiss();
}
});
alertDialog.setView(view);
alertDialog.show();
}

拨打电话(使用之前获取权限)

Intent it = new Intent();
it.setData(Uri.parse("tel:400-168-5116"));//设置要传递的数据,Uri类型,电话号码要加前缀“tel:”
it.setAction(Intent.ACTION_CALL);
startActivity(it);

调整原生checkbox的icon的大小

xml中设置scaleX属性为0.8就变小了,radiobutton同理

recyclerview嵌套在其他滑动组件导致自动滑动问题

rv.setFocusableInTouchMode(false);
rv.requestFocus();

动态设置adapter宽高的方法

// adapter里面
if (mList.size() == 5 && position > 1) {
viewHolder.iv_shop_best_home.getLayoutParams().height = (int) mContext.getResources().getDimension(R.dimen.dp1080_210);
}else if (mList.size() == 3){
viewHolder.iv_shop_best_home.getLayoutParams().height = (int) mContext.getResources().getDimension(R.dimen.dp1080_210);
}
// activity里面
gridLayoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
@Override
public int getSpanSize(int position) {
return setSpanSize(position, businessList);
}
});
private int setSpanSize(int position, List businessList) {
int count = 2;
int size = businessList.size();
if (size == 5) {
if (position == 0 || position == 1) {
count = 3;
}
if (position > 1) {
count = 2;
}
}
if (size == 4) {
count = 3;
}
if (size == 3) {
count = 2;
}
if (size == 2) {
count = 3;
}
if (size == 1) {
count = 6;
}
if (size == 6) {
count = 2;
}
return count;
}

webview处理编辑框相关内容

String html = "
"font{padding:10px; font-size:14px;}活动说明:";
WebSettings settings = webview_content_ticket.getSettings();
settings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN);
webview_content_ticket.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY);
settings.setSupportZoom(false);
webview_content_ticket.loadDataWithBaseURL(CommonUrl.IMAGE_URL, html + ticketBean.getContent(), "text/html", "utf-8", null);
webview_content_ticket.setBackgroundColor(getResources().getColor(R.color.color_8626c5)); // 设置背景色