Android获取view宽高的三种方式

getMeasuredHeight()与getHeight的区别

实际上在当屏幕可以包裹内容的时候,他们的值相等,
只有当view超出屏幕后,才能看出他们的区别:
getMeasuredHeight()是实际View的大小,与屏幕无关,
而getHeight的大小此时则是屏幕的大小。
当超出屏幕后,getMeasuredHeight()等于getHeight()加上屏幕之外没有显示的大小

Android中TextView属性ellipsize=marquee不生效的解决办法

Android TextView实现文字跑马灯效果有两种办法:

1、 TextView的Text值赋值后不更改,很多帖子上说如下写法就可以生效:

1
2
3
4
5
6
7
8
9
10
11
12

<TextView
android:id="@+id/music_name_tv"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ellipsize="marquee" 【必须】
android:focusable="true" 【必须】
android:focusableInTouchMode="true" 【必须】
android:lines="1" 【必须】
android:text="我的中国心我的中国心我的中国心我的中国心我的中国心我的中国心我的中国心我的中国心我的中国心xxxx"
android:textColor="@color/colorAccent"
android:textSize="15sp" />

2、 TextView的文字动态赋值,这个时候直接写在布局Xml里面已经不生效了,需要先给TextView赋值,然后再在代码里面重新把属性设置一遍(亲试可行):

1
2
3
4
5
6
7
8
9
public static void setTextMarquee(TextView textView) {
if (textView != null) {
textView.setEllipsize(TextUtils.TruncateAt.MARQUEE);
textView.setSingleLine(true);
textView.setSelected(true);
textView.setFocusable(true);
textView.setFocusableInTouchMode(true);
}
}

建议第二种。

Android Webview 内容自适应高度

1
2
3
4
5
6
7
8
9
webview.setWebViewClient(new WebViewClient() {
@Override
public void onPageFinished(WebView view, String url) {
webview.loadUrl("javascript:App.resize(document.getElementById('chatsDataList').scrollHeight)");
super.onPageFinished(view, url);
}
});
webview.addJavascriptInterface(this, "App");
webview.loadUrl("http://localhost:" + Constant.port + "/pages/indexCharts.html");
1
2
3
4
5
6
7
8
9
10
11
@JavascriptInterface
public void resize(final float height) {
getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
TT.showToast(mContext, height + "");
//此处的 layoutParmas 需要根据父控件类型进行区分,这里为了简单就不这么做了
webview.setLayoutParams(new LinearLayout.LayoutParams(getResources().getDisplayMetrics().widthPixels, (int) (height * getResources().getDisplayMetrics().density)));
}
});
}

注意:

  • chatsDataList要修改成自己的元素
  • 要运行在UI线程
  • 要设置LayoutParams

    webView.getLayoutParams().height =height;是没有用的

java实现定时任务的三种方法(收集)

  • 普通thread

这是最常见的,创建一个thread,然后让它在while循环里一直运行着,通过sleep方法来达到定时任务的效果。这样可以快速简单的实现,代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
package org.sogrey.task;

public class TaskRunnable {

/**
* @param args
*/
public static void main(String[] args) {
// run in a second
final long timeInterval = 1000;
Runnable runnable = new Runnable() {
public void run() {
while (true) {
// ------- code for task to run
System.out.println("Hello !!");
// ------- ends here
try {
Thread.sleep(timeInterval);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
};
Thread thread = new Thread(runnable);
thread.start();
}
}

json转树状结构(收集)

一切都源于项目需求。近期web项目中需要这样的功能:将json数据转为树级结构,json的数据结构如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

[
{
"id": "1",
"pId": "0",
"value": "水电站项目"
},
{
"id": "2",
"pId": "1",
"value": "项目一标段"
},
{
"id": "3",
"pId": "1",
"value": "项目二标段"
}
]
本站总访问量 | 本文总阅读量