Android 中一些常用而又容易忘记的
2015-07-16 15:57
435 查看
有时候,需要一些小的功能上网找到之后会用word保存起来,但是word打开的时候死慢,而且明显不直观,然后我在想,我的的知识都是网上获取的,我应该也有责任分享知识,这样大家都能获得最有用最直接的知识,提高成本,也希望大家都在网上分享成果。
所以就整理一下,方便自己和他人,欢迎指出错误和多种解决方法,我会及时改正。
1.解决listview上 Item上有按钮时 item本身不能点击的问题
[java] view
plaincopy
1.Item布局的根布局加上android:descendantFocusability=”blocksDescendants”的属性
beforeDescendants:viewgroup会优先其子类控件而获取到焦点
afterDescendants:viewgroup只有当其子类控件不需要获取焦点时才获取焦点
blocksDescendants:viewgroup会覆盖子类控件而直接获得焦点
如果不行的话再继续往下加
2在listview里 添加代码 android:focusable="true"//是否获取焦点
// 获取listitem下面的view的值,item与button都能响应不同的事件,无冲突
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = m_Inflater.inflate(resource, null);
convertView.setClickable(true);
convertView.setOnClickListener(new listener(position));
}
if (resource == R.layout.index_listview_copy) {
indexShareLinerlayout = (LinearLayout) convertView
.findViewById(R.id.index_share_linerlayout);
indexShareLinerlayout.setOnClickListener(new listener(position));
}
return super.getView(position, convertView, parent);
}
class listener implements OnClickListener {
private int position;
public listener(int position) {
this.position = position;
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.index_share_linerlayout:
Dialog dialog = new MyDialog(context, R.style.MyDialog);
dialog.show();
break;
default:
Intent intentcomment = new Intent();
intentcomment.setClass(context, CommentActivity.class);
context.startActivity(intentcomment);
break;
}
}
}
2.获取屏幕宽高
[java] view
plaincopy
DisplayMetrics displayMetrics = new DisplayMetrics();
this.getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
int height = displayMetrics.heightPixels;
int width = displayMetrics.widthPixels;
3.LayoutInflater和inflate()方法的用法
[java] view
plaincopy
LayoutInflater作用是将layout的xml布局文件实例化为View类对象。
实现LayoutInflater的实例化共有3种方法,
(1).通过SystemService获得
LayoutInflaterinflater = (LayoutInflater)
context.getSystemServices(Context.LAYOUT_INFLATER_SERVICES);
Viewview = inflater.inflate(R.layout.main, null);
(2).从给定的context中获得
LayoutInflater inflater = LayoutInflater.from(context);
Viewview = inflater.inflate(R.layout.mian, null);</font></font>
(3).LayoutInflaterinflater =getLayoutInflater();(在Activity中可以使用,实际上是View子类下window的一个函数)
Viewlayout = inflater.inflate(R.layout.main, null);
4.有时候按钮文字在代码中设置setTextColor无效
[html] view
plaincopy
ColorStateList colors = getContext().getResources().getColorStateList(R.color.radio_txt);
radioButton.setTextColor(colors);
5.输入法挤乱布局问题
[java] view
plaincopy
如果不想布局动 在这个activity中的AndroidManifest.xml中加入代码
android:windowSoftInputMode="adjustPan"
如果想让布局动 则加入代码
Android:windowSoftInputMode="stateVisible|adjustPan"
还有一种方法
在对应的layout XML的顶级元素上加一层ScrollView
<ScrollView xmlns:Android="http://schemas.android.com/apk/res/android "
Android:layout_width="fill_parent"
Android:layout_height="fill_parent">
</ScrollView>
如果输入法和输入框有点间距的话,就可以用Android:windowSoftInputMode="adjustReszie"
如果要使adjustResize起效的话,必须要考虑好布局,
布局必须要让最底下的widget或者layout的位置为android:layout_alignParentBottom="true"才能使之生效
6.Android让页面默认弹出输入法和不弹出输入法的问题
[html] view
plaincopy
<pre name="code" class="java">看一个manifest中Activity的配置,如果这个页面有EditText,并且我们想要进入这个页面的时候默认弹出输入法,可以这样设置这个属相:
android:windowSoftInputMode=stateVisible,这样就会默认弹起输入法,当然还有别的办法。
<activity android:name=".ui.login"
android:configChanges="orientation|keyboardHidden|locale"
android:screenOrientation="portrait"
android:windowSoftInputMode="stateVisible|adjustPan" >
</activity>
Android EditText 不弹出输入法总结
方法一:
在AndroidMainfest.xml中选择哪个activity,设置windowSoftInputMode属性为adjustUnspecified|stateHidden
方法二:
让EditText失去焦点,使用EditText的clearFocus方法
例如:EditText edit=(EditText)findViewById(R.id.edit);
edit.clearFocus();
方法三:
强制隐藏Android输入法窗口
例如:EditText edit=(EditText)findViewById(R.id.edit);
InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(edit.getWindowToken(),0);
EditText始终不弹出软件键盘
例:EditText edit=(EditText)findViewById(R.id.edit);
edit.setInputType(InputType.TYPE_NULL);
7.获取时间差几小时几分钟前
[java] view
plaincopy
private final static long minute = 60 * 1000;// 1分钟
private final static long hour = 60 * minute;// 1小时
private final static long day = 24 * hour;// 1天
private final static long month = 31 * day;// 月
private final static long year = 12 * month;// 年
/**
* 返回文字描述的日期
*
* @param date
* @return
*/
public static String getTimeFormatText(Date date) {
if (date == null) {
return null;
}
long diff = new Date().getTime() - date.getTime();
long r = 0;
if (diff > year) {
r = (diff / year);
return r + "年前";
}
if (diff > month) {
r = (diff / month);
return r + "个月前";
}
if (diff > day) {
r = (diff / day);
return r + "天前";
}
if (diff > hour) {
r = (diff / hour);
return r + "个小时前";
}
if (diff > minute) {
r = (diff / minute);
return r + "分钟前";
}
return "刚刚";
}
// 如果要奖Sring转为date型需要用的到方法
//SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//Date date = sdf.parse("2008-08-08 12:10:12");
8.bitmap与String的转化,以及url转化成bitmap
[java] view
plaincopy
/**
* 图片转成string
*
* @param bitmap
* @return
*/
public static String convertIconToString(Bitmap bitmap) {
ByteArrayOutputStream baos = new ByteArrayOutputStream();// outputstream
bitmap.compress(CompressFormat.PNG, 100, baos);
byte[] appicon = baos.toByteArray();// 转为byte数组
return Base64.encodeToString(appicon, Base64.DEFAULT);
}
/**
* string转成bitmap
*
* @param st
*/
public static Bitmap convertStringToIcon(String st) {
// OutputStream out;
Bitmap bitmap = null;
try {
byte[] bitmapArray;
bitmapArray = Base64.decode(st, Base64.DEFAULT);
bitmap = BitmapFactory.decodeByteArray(bitmapArray, 0,
bitmapArray.length);
return bitmap;
} catch (Exception e) {
return null;
}
}
/**
* 根据头像的url 获取bitmap
*/
public Bitmap getImgBitmap(String imageUri) {
// 显示网络上的图片
Bitmap bitmap = null;
HttpURLConnection conn = null;
InputStream is = null;
try {
URL myFileUrl = new URL(imageUri);
conn = (HttpURLConnection) myFileUrl.openConnection();
conn.setDoInput(true);
conn.connect();
is = conn.getInputStream();
bitmap = BitmapFactory.decodeStream(is);
is.close();
} catch (IOException e) {
e.printStackTrace();
return null;
} finally {
try {
conn.disconnect();
is.close();
is.reset();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return bitmap;
9.md5 加密
[java] view
plaincopy
/* md5 加密 */
static public String md5(String str) {
MessageDigest algorithm = null;
try {
algorithm = MessageDigest.getInstance("MD5");
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
if (algorithm != null) {
algorithm.reset();
algorithm.update(str.getBytes());
byte[] bytes = algorithm.digest();
StringBuilder hexString = new StringBuilder();
for (byte b : bytes) {
hexString.append(Integer.toHexString(0xFF & b));
}
return hexString.toString();
}
return "";
}
10.dip与px的转化,以及首字母大写
[java] view
plaincopy
public static int px2dip(Context context, float pxValue) {
final float scale = context.getResources().getDisplayMetrics().density;
return (int) (pxValue / scale + 0.5f);
}
public static int dip2px(Context context, float dipValue) {
final float scale = context.getResources().getDisplayMetrics().density;
return (int) (dipValue * scale + 0.5f);
}
[java] view
plaincopy
/* 首字母大写 */
static public String ucfirst(String str) {
if (str != null && str != "") {
str = str.substring(0, 1).toUpperCase() + str.substring(1);
}
return str;
}
所以就整理一下,方便自己和他人,欢迎指出错误和多种解决方法,我会及时改正。
1.解决listview上 Item上有按钮时 item本身不能点击的问题
[java] view
plaincopy
1.Item布局的根布局加上android:descendantFocusability=”blocksDescendants”的属性
beforeDescendants:viewgroup会优先其子类控件而获取到焦点
afterDescendants:viewgroup只有当其子类控件不需要获取焦点时才获取焦点
blocksDescendants:viewgroup会覆盖子类控件而直接获得焦点
如果不行的话再继续往下加
2在listview里 添加代码 android:focusable="true"//是否获取焦点
// 获取listitem下面的view的值,item与button都能响应不同的事件,无冲突
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = m_Inflater.inflate(resource, null);
convertView.setClickable(true);
convertView.setOnClickListener(new listener(position));
}
if (resource == R.layout.index_listview_copy) {
indexShareLinerlayout = (LinearLayout) convertView
.findViewById(R.id.index_share_linerlayout);
indexShareLinerlayout.setOnClickListener(new listener(position));
}
return super.getView(position, convertView, parent);
}
class listener implements OnClickListener {
private int position;
public listener(int position) {
this.position = position;
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.index_share_linerlayout:
Dialog dialog = new MyDialog(context, R.style.MyDialog);
dialog.show();
break;
default:
Intent intentcomment = new Intent();
intentcomment.setClass(context, CommentActivity.class);
context.startActivity(intentcomment);
break;
}
}
}
2.获取屏幕宽高
[java] view
plaincopy
DisplayMetrics displayMetrics = new DisplayMetrics();
this.getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
int height = displayMetrics.heightPixels;
int width = displayMetrics.widthPixels;
3.LayoutInflater和inflate()方法的用法
[java] view
plaincopy
LayoutInflater作用是将layout的xml布局文件实例化为View类对象。
实现LayoutInflater的实例化共有3种方法,
(1).通过SystemService获得
LayoutInflaterinflater = (LayoutInflater)
context.getSystemServices(Context.LAYOUT_INFLATER_SERVICES);
Viewview = inflater.inflate(R.layout.main, null);
(2).从给定的context中获得
LayoutInflater inflater = LayoutInflater.from(context);
Viewview = inflater.inflate(R.layout.mian, null);</font></font>
(3).LayoutInflaterinflater =getLayoutInflater();(在Activity中可以使用,实际上是View子类下window的一个函数)
Viewlayout = inflater.inflate(R.layout.main, null);
4.有时候按钮文字在代码中设置setTextColor无效
[html] view
plaincopy
ColorStateList colors = getContext().getResources().getColorStateList(R.color.radio_txt);
radioButton.setTextColor(colors);
5.输入法挤乱布局问题
[java] view
plaincopy
如果不想布局动 在这个activity中的AndroidManifest.xml中加入代码
android:windowSoftInputMode="adjustPan"
如果想让布局动 则加入代码
Android:windowSoftInputMode="stateVisible|adjustPan"
还有一种方法
在对应的layout XML的顶级元素上加一层ScrollView
<ScrollView xmlns:Android="http://schemas.android.com/apk/res/android "
Android:layout_width="fill_parent"
Android:layout_height="fill_parent">
</ScrollView>
如果输入法和输入框有点间距的话,就可以用Android:windowSoftInputMode="adjustReszie"
如果要使adjustResize起效的话,必须要考虑好布局,
布局必须要让最底下的widget或者layout的位置为android:layout_alignParentBottom="true"才能使之生效
6.Android让页面默认弹出输入法和不弹出输入法的问题
[html] view
plaincopy
<pre name="code" class="java">看一个manifest中Activity的配置,如果这个页面有EditText,并且我们想要进入这个页面的时候默认弹出输入法,可以这样设置这个属相:
android:windowSoftInputMode=stateVisible,这样就会默认弹起输入法,当然还有别的办法。
<activity android:name=".ui.login"
android:configChanges="orientation|keyboardHidden|locale"
android:screenOrientation="portrait"
android:windowSoftInputMode="stateVisible|adjustPan" >
</activity>
Android EditText 不弹出输入法总结
方法一:
在AndroidMainfest.xml中选择哪个activity,设置windowSoftInputMode属性为adjustUnspecified|stateHidden
方法二:
让EditText失去焦点,使用EditText的clearFocus方法
例如:EditText edit=(EditText)findViewById(R.id.edit);
edit.clearFocus();
方法三:
强制隐藏Android输入法窗口
例如:EditText edit=(EditText)findViewById(R.id.edit);
InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(edit.getWindowToken(),0);
EditText始终不弹出软件键盘
例:EditText edit=(EditText)findViewById(R.id.edit);
edit.setInputType(InputType.TYPE_NULL);
7.获取时间差几小时几分钟前
[java] view
plaincopy
private final static long minute = 60 * 1000;// 1分钟
private final static long hour = 60 * minute;// 1小时
private final static long day = 24 * hour;// 1天
private final static long month = 31 * day;// 月
private final static long year = 12 * month;// 年
/**
* 返回文字描述的日期
*
* @param date
* @return
*/
public static String getTimeFormatText(Date date) {
if (date == null) {
return null;
}
long diff = new Date().getTime() - date.getTime();
long r = 0;
if (diff > year) {
r = (diff / year);
return r + "年前";
}
if (diff > month) {
r = (diff / month);
return r + "个月前";
}
if (diff > day) {
r = (diff / day);
return r + "天前";
}
if (diff > hour) {
r = (diff / hour);
return r + "个小时前";
}
if (diff > minute) {
r = (diff / minute);
return r + "分钟前";
}
return "刚刚";
}
// 如果要奖Sring转为date型需要用的到方法
//SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//Date date = sdf.parse("2008-08-08 12:10:12");
8.bitmap与String的转化,以及url转化成bitmap
[java] view
plaincopy
/**
* 图片转成string
*
* @param bitmap
* @return
*/
public static String convertIconToString(Bitmap bitmap) {
ByteArrayOutputStream baos = new ByteArrayOutputStream();// outputstream
bitmap.compress(CompressFormat.PNG, 100, baos);
byte[] appicon = baos.toByteArray();// 转为byte数组
return Base64.encodeToString(appicon, Base64.DEFAULT);
}
/**
* string转成bitmap
*
* @param st
*/
public static Bitmap convertStringToIcon(String st) {
// OutputStream out;
Bitmap bitmap = null;
try {
byte[] bitmapArray;
bitmapArray = Base64.decode(st, Base64.DEFAULT);
bitmap = BitmapFactory.decodeByteArray(bitmapArray, 0,
bitmapArray.length);
return bitmap;
} catch (Exception e) {
return null;
}
}
/**
* 根据头像的url 获取bitmap
*/
public Bitmap getImgBitmap(String imageUri) {
// 显示网络上的图片
Bitmap bitmap = null;
HttpURLConnection conn = null;
InputStream is = null;
try {
URL myFileUrl = new URL(imageUri);
conn = (HttpURLConnection) myFileUrl.openConnection();
conn.setDoInput(true);
conn.connect();
is = conn.getInputStream();
bitmap = BitmapFactory.decodeStream(is);
is.close();
} catch (IOException e) {
e.printStackTrace();
return null;
} finally {
try {
conn.disconnect();
is.close();
is.reset();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return bitmap;
9.md5 加密
[java] view
plaincopy
/* md5 加密 */
static public String md5(String str) {
MessageDigest algorithm = null;
try {
algorithm = MessageDigest.getInstance("MD5");
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
if (algorithm != null) {
algorithm.reset();
algorithm.update(str.getBytes());
byte[] bytes = algorithm.digest();
StringBuilder hexString = new StringBuilder();
for (byte b : bytes) {
hexString.append(Integer.toHexString(0xFF & b));
}
return hexString.toString();
}
return "";
}
10.dip与px的转化,以及首字母大写
[java] view
plaincopy
public static int px2dip(Context context, float pxValue) {
final float scale = context.getResources().getDisplayMetrics().density;
return (int) (pxValue / scale + 0.5f);
}
public static int dip2px(Context context, float dipValue) {
final float scale = context.getResources().getDisplayMetrics().density;
return (int) (dipValue * scale + 0.5f);
}
[java] view
plaincopy
/* 首字母大写 */
static public String ucfirst(String str) {
if (str != null && str != "") {
str = str.substring(0, 1).toUpperCase() + str.substring(1);
}
return str;
}
相关文章推荐
- Android 开发相关的Blog推荐——跟随大神的脚步才能成长为大神
- android RecylerView需要注意的问题
- android中Thread对于Adapter出现的报错情况的处理以及如何正确使用Spinner与SimpleCurosorAdapter
- 智能储物柜/快递柜系统解析<一>
- Android中ListView(一)分页加载数据
- java&nbsp;判断&nbsp;android、iph…
- 最流行的android组件大全
- android webview响应web页面js
- Android使用命令创建项目并打包安装
- Android--sharepreference总结
- Android InputMethodManager输入法简介
- android帮助文档打开慢
- android依赖注入框架Butter Knife的使用。
- Android学习之SQLite学习
- android-LV数据源初始化异常
- Android圆形向外扩散颜色渐浅动画
- Android Studio 基本设置图解教程
- android listview 不能点击 descendantFocusability
- Android APK 签名 (转发)
- android之apk自动更新采用Notification通知提示并显示下载进度