android:divider="颜色" android:dividerHeight="高度"
虽然也可以动态设置,不过动态设置的话会产生一些小问题。%1$.1f
;如果把1.132赋值给某string变成1?–>占位符用%1$.0f
。大概的意思为:前者保留前面一位与小数点后一位,后者保留前面一位与小数点后0位。android:marginEnd="-多少dp"
来处理。android:singlelines="true"
这样键盘的“回车”键就会变成“下一项”键。layout_width:"match_parent&&layout_heigth="wrap_content"
控件A;layout_width:"match_parent&&layout_heigth="wrap_content"
控件B,ViewGroup假如是LinerLayout 且B在A的下面。我们可以先让它们稍微重叠在一起。那么显示的布局在默认情况为B叠在A的上面。如果我们需要的是A叠在B上面的这中情况呢?那么可以通过b.setTranslateZ(-1) 或者 a.setTranslateZ(1)
来实现。onRequestPermission
方法最好放在Activity中。android:alignParentBottom="true" android:marginBottom=“xxdp”
这样无论图片怎么缩放,最底部的位置都不变。valueAnimation.ofInt(x,y)
提前设好其中的x,就等于在初始的时候已经translateY了x的距离。View.GONE
了,那么此时获取不到它的高度。要在View.INVISIBLE
?或View.VISIBLE
后才能getHeight
。cancel
。<style name="popup_select_text_size_animation" parent="android:Animation">
<item name="android:windowEnterAnimation">@anim/入场动画
</item><!--- 进入动画-->
<item name="android:windowExitAnimation">@anim/出场动画</item>
</style>
viewpager.setOffScreenPageLimit(int)
为viewpage预加载页面,不过在viewpager的源码中已经默认了无论怎样都会帮你预加载一张页面。setTextColor(Color)
设不进去可能是因为setTextColor(Color)
要变成setTextColor(getResource.getColor(xxx))
。TextView.setText()
里面一定是string,不是的话回报错。
标签来实现按钮点击,在写其xml的时候,state_pressed
要在state_enable
上面。
标签的xml,设入android:background="xxx"
中,设入哪个控件,哪个控件就有ripple点击效果。android:fillviewport="true
,效果相当于android:layout_height="match_parent
RecyclerView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
recyclerViewHeight = RecyclerView.getHeight();//获取RecyclerView高度
recyclerViewTop = RecyclerView.getTop();//获取RecyclerView的top坐标
recyclerViewBottom = RecyclerView.getBottom();//获取RecyclerView的bottom坐标
for (int i = 0; i < RecyclerView.getChildCount(); i++) {
View view = layoutManager.findViewByPosition(i);
if (view != null) {
//处理获取到的item
}
}
}
}
});
getViewTreeObserver().addOnGlobalLayoutListener会回调多次,可以在获取到你想要的值的时候通过RecyclerView.getViewTreeObserver().removeOnGlobalLayoutListener(this);
把它移除监听。
JsonObject.optString(xxx)
会在得不到值的时候返回一个“”字符串。Json.has(xxx)
是判断一个Json中是否含有某个key值。new Handle()
会报Can’t create handle inside thread has got called Lopper.prepare()异常。需要先调用Loop.pare()
启用Lopper,然后调用Looper.loop()
让Looper开始工作。setOnTouchListener()
中去掉需要复写performOnClick的警告。a.在被监听的控件中重写performClick方法;b.在onTouch中写入view.performClick()
就能去掉烦人的黄色警告。//自定义EditText控件中
@Override
public boolean performClick() {
return super.performClick();
}
//使用时:
EditText.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_UP) {
EditText.performClick();
}
return false;
}
});
implementation 'com.android.support:multidex:1.0.3'
这个库,然后在application文件中重写attachBaseContext
方法。这样App不仅再有一个dex文件,可能会产生多个dex文件,这样就可以避免64k问题。 @Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
MultiDex.install(this);
}
private void showDatePicker() {
Calendar calendar = Calendar.getInstance();
DatePickerDialog datePickerDialog = new DatePickerDialog(context, R.style.主题, new DatePickerDialog.OnDateSetListener() {
@Override
public void onDateSet(DatePicker datePicker, int year, int month, int dayOfMonth) {
//获取年月日,月份记得要+1
}
}, calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH));
//设置最大值为今天
datePickerDialog.getDatePicker().setMaxDate(new Date().getTime());
datePickerDialog.show();
}
android:src="xxx
来显示一张图片,并把ImageView的宽设为android:layout_widt="match_parent
这样图片会在宽度进行一定的拉伸导致变形,那么可以再增加一个属性:android:adjustnewbound="true"
来防止变形。该属性的大概意思是,宽或高其中一方被拉伸,那么另一方也拉伸调整。JsonArray.put(JsonObject);
搞掂。ListView.setFocusable(false)
就能解决该问题。
与一个继承了ViewFinderView的自定义View,并且它们两个的id一定要与官方的id一样并且不能少。id:zxing_barcode_surface,zxing_viewfinder_view。
作为ViewGroup,再TableLayout中设置 shrinkColunms=0
意思是收缩第一列。接着在该ViewGroup里包着
,里面放入文本1与文本2就能实现上述需求。android:autoLink
指定格式的文本转换为可点击的超链接。但只能控制标准的文本。DecimalFormat format = new DecimalFormat("$###,###,###.00");
->1234.99主要是.00才能格式化出小数点。format(PREFER_ARGB_8888)
。private void init() {
setFilters(new InputFilter[]{new EmojiExcludeFilter()});
}
private class EmojiExcludeFilter implements InputFilter {
@Override
public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
for (int i = start; i < end; i++) {
int type = Character.getType(source.charAt(i));
if (type == Character.SURROGATE || type == Character.OTHER_SYMBOL) {//关键
return "";
}
}
return null;
}
}
webview.loadDataWithBaseURL(null,data,"text/html","utf-8",null)
。clickable="true"
或者监听drawerLayout在onDrawerOpened中setClickable(true)
。
这个权限会报警不过可以用,可以通过ignore去掉这个警报。报警呢主要是因为该权限是用来改变系统设置的,一般只归系统APP所有。PhoneNumberUtils.formatNumber(区号+号码,ISO)
这样才有效,假如你有个香港号码,要格式话它,不过如果它不是一个标准的香港号码则格式话无效。substring(2)
意思是截取从第二个字符开始到最后一个。putExtra("xxx")
,然后在指定的Activity中的onNewIntext()和onCreate中获取该Extra,并判断将要跳转到那张fragemnt。setTimeAfter(xxx)
意思是多少秒后把通知从后台直接消失。 final int paddingLeft = getPaddingLeft();
final int paddingRight = getPaddingRight();
final int paddingTop = getPaddingTop();
final int paddingBottom = getPaddingBottom();
int width = getWidth() - paddingLeft - paddingRight;
int height = getHeight() - paddingTop - paddingBottom;
//例如我们画一个圆
canvas.drawCircle(paddingLeft + width/2, paddingTop + height / 2, radius, paint);
在上面的代码中画圆的时候加上了paddingLeft与paddingTop,这是为了时在xml中加入的padding能够作用到我们画的这个图形上,如果我们在画圆时不加上padding,但在出来的效果中padding时有的,只是没有作用到我们画的圆上面。现在还要处理wrap_content,因为源码中如果不指定wrap_content的大小,其作用与match_parent的大小是一样的:
int widthSpecMode = MeasureSpec.getMode(widthMeasureSpec);
int widthSpecSize = MeasureSpec.getSize(widthMeasureSpec);
int heightSpecMode = MeasureSpec.getMode(heightMeasureSpec);
int heightSpecSize = MeasureSpec.getSize(heightMeasureSpec);
// 宽高指定为200
if (widthSpecMode == MeasureSpec.AT_MOST && heightSpecMode == MeasureSpec.AT_MOST) {
setMeasuredDimension(200, 200);
} else if (widthMeasureSpec == MeasureSpec.AT_MOST) {
setMeasuredDimension(200, heightSpecSize);
} else if (heightMeasureSpec == MeasureSpec.AT_MOST) {
setMeasuredDimension(widthSpecSize, 200);
}
给wrap_content的默认大小为200,这时在看回padding,上面说的在画圆的时候加上padding让padding能作用到圆上面,但它的作用会把圆挤小。不过我们在维持圆的大小的同时又有padding,那么可以这么做:
int widthSpecMode = MeasureSpec.getMode(widthMeasureSpec);
int widthSpecSize = MeasureSpec.getSize(widthMeasureSpec);
int heightSpecMode = MeasureSpec.getMode(heightMeasureSpec);
int heightSpecSize = MeasureSpec.getSize(heightMeasureSpec);
if (widthSpecMode == MeasureSpec.AT_MOST && heightSpecMode == MeasureSpec.AT_MOST) {
setMeasuredDimension(200 + paddingLeft + paddingRight,
200 + paddingTop + paddingBottom);
} else if (widthMeasureSpec == MeasureSpec.AT_MOST) {
setMeasuredDimension(200, heightSpecSize + paddingLeft + paddingRight);
} else if (heightMeasureSpec == MeasureSpec.AT_MOST) {
setMeasuredDimension(widthSpecSize, 200 + paddingTop + paddingBottom);
}
这样就能保持圆的大小不变而且也有padding