键盘事件
在项目的AndroidManifest.xml文件中界面对应的
- android:windowSoftInputMode=”stateVisible|adjustResize” 屏幕整体上移,stateVisible是自动显示软键盘
- android:windowSoftInputMode=”adjustPan” 覆盖屏幕,不会上移屏幕,这个样子好像不能滑动
"stateUnspecified" 软键盘的状态(是否它是隐藏或可见)没有被指定。系统将选择一个合适的状态或依赖于主题的设置。这个是为了软件盘行为默认的设置。
"stateUnchanged" 软键盘被保持无论它上次是什么状态,是否可见或隐藏,当主窗口出现在前面时。
"stateHidden" 当用户选择该Activity时,软键盘被隐藏——也就是,当用户确定导航到该Activity时,而不是返回到它由于离开另一个Activity。
"stateAlwaysHidden" 软键盘总是被隐藏的,当该Activity主窗口获取焦点时。
"stateVisible" 软键盘是可见的,当那个是正常合适的时(当用户导航到Activity主窗口时)。
"stateAlwaysVisible" 当用户选择这个Activity时,软键盘是可见的——也就是,也就是,当用户确定导航到该Activity时,而不是返回到它由于离开另一个Activity。
"adjustUnspecified" 它不被指定是否该Activity主窗口调整大小以便留出软键盘的空间,或是否窗口上的内容得到屏幕上当前的焦点是可见的。系统将自动选择这些模式中一种主要依赖于是否窗口的内容有任何布局视图能够滚动他们的内容。如果有这样的一个视图,这个窗口将调整大小,这样的假设可以使滚动窗口的内容在一个较小的区域中可见的。这个是主窗口默认的行为设置。
"adjustResize" 该Activity主窗口总是被调整屏幕的大小以便留出软键盘的空间。
"adjustPan" 该Activity主窗口并不调整屏幕的大小以便留出软键盘的空间。相反,当前窗口的内容将自动移动以便当前焦点从不被键盘覆盖和用户能总是看到输入内容的部分。这个通常是不期望比调整大小,因为用户可能关闭软键盘以便获得与被覆盖内容的交互操作。
TextView
使用代码动态设置Drawable图片
TextView textDrawable = (TextView) findViewById(R.id.text_drawable);
Drawable drawableLeft = getResources().getDrawable(R.drawable.ic_launcher);
textDrawable.setCompoundDrawablesWithIntrinsicBounds(drawableLeft, null, null, null);
空格
  == 普通的英文半角空格
  == ==   == no-break space (普通的英文半角空格但不换行)
  == 中文全角空格 (一个中文宽度)
  ==   == en空格 (半个中文宽度)
  ==   == em空格 (一个中文宽度)
  == 四分之一em空格 (四分之一中文宽度)相比平时的空格( ),nbsp拥有不间断(non-breaking)特性。即连续的nbsp会在同一行内显示。即使有100个连续的nbsp,浏览器也不会把它们拆成两行。
TextView自动缩放
app:autoSizeTextType="uniform" 使用特性
app:autoSizeMinTextSize="12sp" 最小的size
app:autoSizeMaxTextSize="100sp" 最大size
app:autoSizeStepGranularity="2sp" 每次缩小多少
text.setAutoSizeTextTypeUniformWithConfiguration(2, 28, 2, TypedValue.COMPLEX_UNIT_DIP);
富文本
Html.fromHtml(mData.getAnswer())
EditText
键盘回车事件
android:imeOptions="actionSearch"
android:singleLine="true"
Edittext焦点问题
android:focusable="true"
android:focusableInTouchMode="true"
键盘搜索
mKey.setOnEditorActionListener((v, actionId, event) -> {
if (actionId == EditorInfo.IME_ACTION_SEARCH) {
String s = mKey.getText().toString();
if (StringUtils.isEmpty(s)){
showMsg("请输入商品名称");
return false;
}
key = StringUtils.null2Length0(s);
KeyboardUtils.hideSoftInput(mContext);
initData();
return false;
}
return true;
});
View
重绘
推荐先调用requestLayout方法再调用invalidate方法。
子View可以超出父View
android:clipChildren="false"
android:clipToPadding="false"
android View 绘制完成监听
//view重绘时回调
view.getViewTreeObserver().addOnDrawListener(new OnDrawListener() {
@Override
public void onDraw() {
// TODO Auto-generated method stub
}
});
//view加载完成时回调
view.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
// TODO Auto-generated method stub
}
});
RecyclerView
设置gridLayoutManager占用几列
mAdapter.setSpanSizeLookup((gridLayoutManager, position) ->
data.getAllCity().get(position).getType()
);
ViewPager切换时为什么会自动跳到recyclerView的位置
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:descendantFocusability="blocksDescendants">
<android.support.v7.widget.RecyclerView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:overScrollMode="never"/>
</RelativeLayout>
RecyclerView如何去掉上拉刷新和下拉加载的阴影
RecyclerView.setOverScrollMode(View.OVER_SCROLL_NEVER);
BottomSheetDialogFragment
设置背景半透明
dialog.getWindow().findViewById(R.id.design_bottom_sheet)
// #00ffffff
.setBackgroundResource(R.color.tm);
WebView
NestedScrollView与WebView嵌套
// 放到NestedScrollView父布局
android:descendantFocusability="blocksDescendants"
android:fillViewport="true"
loadDataWithBaseURL图片自适应
```java private String getNewContent(String htmltext) { Document doc = Jsoup.parse(htmltext); Elements elements = doc.getElementsByTag(“img”); for (Element element : elements) {
element.attr("width", "100%").attr("height", "auto");
} return doc.toString(); } public static final String HEAD = “<!DOCTYPE html>\n” + “\n” + “ \n” + “ \n” + “ \n” + “ \n” + “ \n” + “ \n” + “ \n” + “ \n” + “ \n” + “ “;
public static final String END = “\n” + ““;
<a name="kchjM"></a>
# 富文本字符串
<a name="GjgLR"></a>
## 点击事件样式
```java
new ClickableSpan() {
@Override
public void onClick(View widget) {
// bean.getUid();
}
@Override
public void updateDrawState(TextPaint ds) {
//文字的颜色
ds.setColor(0xff00A4FF);
//是否设置下划线
ds.setUnderlineText(false);
}
}
NestedScrollView
子控件实现 match_parent效果
android:fillViewport="true"
Drawable
修改背景色
GradientDrawable skinDrawable = (GradientDrawable) JfResourceUtil.getSkinDrawable(R.drawable.study_dialog_analysis_title);
skinDrawable.setColor(JfResourceUtil.getSkinColor(R.color.frame_gray_background_color));
其他
客服qq
String url="mqqwpa://im/chat?chat_type=wpa&uin=123456";
startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(url)));
Android 6.0 中引入了是否允许网络使用明文传输的配置:
<application android:usesCleartextTraffic=["true" | "false"]>