Android 开发技巧总结(二)

1.首选项的存取数据

写一个类,里面放入存取方法,然后在外面进行调用

public class PrefsUtils {

private static final String PREFS_NAME="com.yomoto.util.OtherPrefs";

//这里放入的名字存入的地址是:data/data/项目包名/shared_prefs/PREFS_NAME

//得到首选项中的数据

public static String getValue(Context context,String key,String defaultvalue){

SharedPreferences prefs=context.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE);

if(prefs==null) return "Unknow";

return prefs.getString(key, defaultvalue);

}

//向首选项中存入数据

public static void setValue(Context context,String key,String value){

SharedPreferences prefs=context.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE);

Editor editor=prefs.edit();

if(editor==null) return;

editor.putString(key, value);

editor.commit();

}}

在外面对首选项中的方法进行调用:

拿数据:

//0是拿字段为intro1的值的时,没有值情况下的默认值

PrefsUtils.getValue(BaseApplication.this, "intro1", "0");

存数据:

PrefsUtils.setValue(LogoActivity.this, "intor1", "1");

2.联网情况的判断,可以放入工具类中的方法

Public static Boolean isNetworkAvailable(Contextcontext){

try{

ConnectivityManager cm = (ConnectivityManager)context

.getSystemService(Context.CONNECTIVITY_SERVICE);

//获取网络信息

NetworkInfo info = cm.getActiveNetworkInfo();

//返回检测的网络状态

return(info!=null&&info.isConnected());

}catch(Exceptione){

e.printStackTrace();

returnfalse;

}

}

3.判断SD卡是否存在,可以放入工具类中的方法

Public static Boolean hasSdcard(){

String state = Environment.getExternalStorageState();

if(state.equals(Environment.MEDIA_MOUNTED)){

return true;

}else{

return false;

}}

4.在activity中的几个常用设置

//默认不弹出软键盘,在setContentView之前

1)getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);

//设置界面全屏,在setContentView之前

2)getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);

或者在manifest中进行设置,android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen"

5.在ScrollView中嵌入GridView和ListView

public class NavigationGridview extends GridView{

public NavigationGridview(Contextcontext,AttributeSetattrs){

super(context,attrs);

}

publicNavigationGridview(Contextcontext){

super(context);

}

publicNavigationGridview(Contextcontext,AttributeSetattrs,intdefStyle){

super(context,attrs,defStyle);

}

@Override

publicvoidonMeasure(intwidthMeasureSpec,intheightMeasureSpec){

int expandSpec = MeasureSpec.makeMeasureSpec(

Integer.MAX_VALUE>>2,MeasureSpec.AT_MOST);

super.onMeasure(widthMeasureSpec,expandSpec);

}}

ListView与GridView一样,重写的方法一样。

6.Android生命周期的问题

1)软件启动后,第一次会执行baseapplication和启动的activity,按返回键退出的再打开的时候不执行baseapplication,只有将进程杀死,才会执行baseapplication和activity.

7.语法问题

1. 设置日期格式的语法

private SimpleDateFormat format;

format = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");

Date current = new Date(System.currentTimeMillis());

String str = format.format(current);

2.设置在手机中控制字的回车

在需要回车的地方加上\n

例如:在strings.xml中设置的效果为:

<string name="vip_content_small11">比普通用户享受更低的价格\n更多种类的优惠券比团\n购更优惠,更方便</string>

8.额外知识点总结

1)手机屏幕

小米1s的手机屏幕 高度:854 宽度:480

三星5.8寸手机屏幕 高度:960 宽度:540

9.问题解决和处理

1)在ScrollView中的Listview有时候添加完数据后,listview会获取焦点,导致界面显示从listview开始,此时在listView.setAdapter(adapter);后加上

listView.setFocusable(false);来解决焦点的问题。

10.手机直接跳转到网页

Uriuri=Uri.parse("http://appadmin.ibinggo.com/adm_program/modules/downloads/get_file.php?file_id=7");

Intentintent=newIntent(Intent.ACTION_VIEW,uri);

startActivity(intent);

11. message配合handler的使用

Messagemessage=mHandler.obtainMessage();//数据下载完毕后,向handler发送一个数据,进行界面ui的更新。

message.what=1;

message.sendToTarget();

Handler mHandler = new Handler(){

@Override

Public void handleMessage(Messagemsg){

super.handleMessage(msg);

if(msg.what==1){}

}}

12. Android基础知识点

1)Android UI更新是在主线程中进行的。

2)<application

android:allowBackup="true"

android:icon="@drawable/ic_donga"

//这里一定要写上它的名字

android:name="com.qianxunnt.xinlife.activity.BaseApplication"

android:label="@string/app_name"

android:theme="@style/Theme.Sherlock"

>

3)根据条件分割字符串

String[] s = t.split("sess_id="); //拆分字段

4) Gson gson =new Gson(); //解析json到localCouponsList

//处理集合数据

mCoupons = gson.fromJson(t, new TypeToken<List<CouponsInfo>>(){}.getType());

//处理单独的类数据

updateTime = gson.fromJson(t, UpdateTimeInfo.class);

5) NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);

// 创建一个Notification

Notification notification = new Notification();

// 设置显示在手机最上边的状态栏的图标

notification.icon = R.drawable.ic_donga;

// 当当前的notification被放到状态栏上的时候,提示内容

notification.tickerText = "您已成功升级为VIP用户!";

//添加声音提示

notification.defaults = Notification.DEFAULT_SOUND;

//让通知点击消失的按钮

notification.flags |= Notification.FLAG_AUTO_CANCEL;

Intent intent = new Intent(NewCouponsDetailActivity.this, MainActivity.class);

PendingIntent pendingIntent = PendingIntent.getActivity(NewCouponsDetailActivity.this, 0, intent, PendingIntent.FLAG_ONE_SHOT);

// 点击状态栏的图标出现的提示信息设置

notification.setLatestEventInfo(NewCouponsDetailActivity.this, "缤购提示", "您已经成功升级为VIP用户,使用期限"+useTime+"天!", pendingIntent);

manager.notify(1,notification);

6)String sDest=URLDecoder.decode(couponsContent.getContent(), "utf-8");

//没有执行baseapplication所以无值

kuaicanWebview.getSettings().setDefaultTextEncodingName("UTF-8") ;

kuaicanWebview.loadDataWithBaseURL(null,sDest,"text/html","UTF-8",null);

7)代码中为控件设置一段简单的动画

Animation animation = new TranslateAnimation(one*currIndex, one*arg0, 0, 0);//显然这个比较简洁,只有一行代码。

animation.setFillAfter(true);// True:图片停在动画结束位置

animation.setDuration(300);

imageView.startAnimation(animation);

8)列表dialog的设置

new AlertDialog.Builder(this).setTitle("报错选择")

.setItems(

new String[] {"电话报错","地址报错","地图位置报错" }, //列表内容

new DialogInterface.OnClickListener() {//点击监听

@Override

public void onClick(

DialogInterface dialog, int which) {//点击位置

}})

.setNegativeButton("确定", null)

.show();

9)根据经纬度算距离

public static double distanceByLngLat(double lng1, double lat1, double lng2,double lat2) {

double radLat1 = lat1 * Math.PI / 180;

double radLat2 = lat2 * Math.PI / 180;

double a = radLat1 - radLat2;

double b = lng1 * Math.PI / 180 - lng2 * Math.PI / 180;

double s = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a / 2), 2)

+ Math.cos(radLat1) * Math.cos(radLat2)

* Math.pow(Math.sin(b / 2), 2)));

s = s * 6378137.0;

s = Math.round(s * 10000) / 10000;

return s;

}

10)对返回按钮的两种监听方式

(1) @Override

public void onBackPressed() {

// TODO Auto-generated method stub

super.onBackPressed();

}

(2) public boolean onKeyDown(int keyCode, KeyEvent event) {

if (keyCode == KeyEvent.KEYCODE_BACK)

{}}

11)

XActivitiesListView listView = (XActivitiesListView)parent;  NotificationInfo coupon =(NotificationInfo)listView.getItemAtPosition(postion);//主要方法

12)设置activity的横屏和竖屏

android:screenOrientation=”landscape”属性即可(landscape是横向,portrait是纵向)

Android 开发技巧总结(二)

时间: 2024-10-11 13:00:10

Android 开发技巧总结(二)的相关文章

Android开发技巧——实现可复用的ActionSheet菜单

在上一篇<Android开发技巧--使用Dialog实现仿QQ的ActionSheet菜单>中,讲了这种菜单的实现过程,接下来将把它改成一个可复用的控件库. 本文原创,转载请注明出处: http://blog.csdn.net/maosidiaoxian/article/details/46324941 对于要实现的可复用的控件库,我需要它具备以下两点: 可添加远程依赖(不考虑Eclipse中的使用) 可灵活配置 分离库的实现代码 对于第一点,需要做的就是在Android Studio中新建一

ANDROID开发笔记(二)

动机: 开发的一个背单词的软件. 不会实现划屏的特性. 方法: 第一步尝试: 在MainActivity中, 增加以下代码后, 如果在视图的空白处点击时, 文本框中的时间就会发生改变. @Override     public boolean onTouchEvent(MotionEvent event) {         // TODO Auto-generated method stub         final TextView textview = (TextView)findVie

Android 开发技巧总结(三)

1.在界面中按返回键判断某个控件的可见性,如果可见,则用动画让其消失,应用并不退出. Onkeydown方法中: if(keyCode == 4){ if(slidingMenu.getVisibility() == View.VISIBLE){ //退出的动画 AnimationSet animationSet = new AnimationSet(true); TranslateAnimation animation = new TranslateAnimation(0,-280, 0, 0

50个Android开发技巧(10 为TextView加入样式)

首先来看一个控件的例子: (原文地址:http://blog.csdn.net/vector_yi/article/details/24428085) 手机上类似这种场景你一定已经见过非常多次了,但有没有考虑过它是如何实现的? 或许你会觉得这是一个略微复杂的自己定义的View,但,没错,这实际上仅仅是一个原生的TextView而已. TextView是一个简单而奇妙的Widget,你能够利用它以不同风格不同格式来展现文字. 举两个简单的样例: 1.在TextView中加入一个超链接 事实上非常e

Android开发——通过扫描二维码,打开或者下载Android应用

Android开发——通过扫描二维码,打开或者下载Android应用 在实现这个功能的时候,被不同的浏览器折磨的胃疼,最后实现了勉强能用,也查考了一下其他人的博客 android实现通过浏览器点击链接打开本地应用(APP)并拿到浏览器传递的数据 android/iPhone:如何从browser直接打开应用程序或者打开应用商店(如果没有应用程序) 1.Html页面(JS不在行,这个是其他人写的) 需要留意的是Android_URL,格式需要符合[scheme]://[host]/[path]?[

Android开发技巧——自定义控件之自定义属性

Android开发技巧--自定义控件之自定义属性 掌握自定义控件是很重要的,因为通过自定义控件,能够:解决UI问题,优化布局性能,简化布局代码. 上一篇讲了如何通过xml把几个控件组织起来,并继承某个ViewGroup子类,把它们封装起来使用.这是我们接触到的最简单的一种自定制控件了.但许多时候,我们还需要在布局文件中使用它们的时候,能通过属性传入一些值,来影响最终的显示结果. 我们在做项目中经常会遇到的一个情况:一张图片加一个文本的组合.比如充值账户成功之后显示的一个界面,上面是一个表示成功的

50个Android开发技巧(24 处理ListView数据为空的情况)

在移动平台上为用户展示数据的一个经常用法是将数据填充进一个List内,而此时须要注意的一点就是: 原文地址:(http://blog.csdn.net/vector_yi/article/details/24936163) 怎样处理须要填充的数据为空的情况? ListView及其它继承自AdapterView的类都有一个简便的处理这样的情况的方法:setEmptyView(View). 当ListView的Adapter为空或者Adapter的isEmpty()方法返回true的时候,它将会把设

Android开发技巧——大图裁剪

本篇内容是接上篇<Android开发技巧--定制仿微信图片裁剪控件> 的,先简单介绍对上篇所封装的裁剪控件的使用,再详细说明如何使用它进行大图裁剪,包括对旋转图片的裁剪. 裁剪控件的简单使用 XML代码 使用如普通控件一样,首先在布局文件里包含该控件: <com.githang.clipimage.ClipImageView xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+i

Android开发技巧之viewstub用法详解及实现延迟加载

这一篇是接着上面的include标签的例子来讲的,地址http://blog.csdn.net/jason0539/article/details/26131831 上一篇的布局中间就用了viewstub这个控件,现在来说一下其作用和用法 " ViewStub 是一个不可见的,大小为0的View,最佳用途就是实现View的延迟加载,避免资源浪费,在需要的时候才加载View " 需要注意的是,加载view之后,viewstub本身就会被新加载进来的view替换掉 上代码了,看完就理解了