2017/3/14 记载
android中UI设计Material Design android中的序列化 android做context全局工具类 ToolBar
app:showAsAction 指定按钮的位置:always表示永远显示,若空间不够则不显示
ifRoom表示空间足够的情况下显示在Toolbar中,不够就显示在菜单中,而never则永远显示在菜单中
AndroidManifest中activity下属性android:label="Fruits"表示指定toolbar的文字内容,没有指定的话
默认使用application中的指定的lable内容,也就是我们的应用名称。
例子:
修改styles.xml
在res下新建menu包toolbar.xml
效果图:
这些地方都需要,而一般情况下只有一个在Activity类下才会有context上下文参数,而我们有很多情况下的逻辑处理又是脱离了Activity活动的,这个时候又应该怎么办呢?
打个比如写一个网络封装类:
如果我们想再执行操作之前,检测一下网络,如果网络不存在直接给它一个return,并且Toast提示一下,不就可以减少很多操作了吗?
在这里就要用context,那又该如何做呢?其实APP启动的时候,就提供了一个Application类,会初始化这个类,用于管理程序内的全局通信,比如context
新建一个类继承Application
我们需要告知系统,启动时初始化我们新建的这个类,在AndroidManifest.xml中
***在我们需要用到context的地方直接MyApplication.getContext()不就直接获取到全局context了嘛
intent传递数据的时候,遇到要传递对象怎么办?将对象类序列化serializable就好了,至于什么是序列化百度一下就知道了。开发web的哥们儿都知道滴
intent.putExtra("person_data",person);//这里的person对象已经序列化,
在下一个意图的时候,得到:Person person = (Person)getIntent().getSerializableExtra("person_data");即可
做一个日志工具类即可:当我们在上线之前需要打印日志,而上线的时候,如果程序依然在打印日志,就会造成数据泄露,使用直接做的日志开发工具,当上线的时候直接屏蔽就可以
android中UI设计Material Design android中的序列化 android做context全局工具类 ToolBar
Material Design
1.ToolBar
通过使用item来定义action按钮app:showAsAction 指定按钮的位置:always表示永远显示,若空间不够则不显示
ifRoom表示空间足够的情况下显示在Toolbar中,不够就显示在菜单中,而never则永远显示在菜单中
AndroidManifest中activity下属性android:label="Fruits"表示指定toolbar的文字内容,没有指定的话
默认使用application中的指定的lable内容,也就是我们的应用名称。
例子:
修改styles.xml
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
toolbar_layout.xml
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:background="?attr/colorPrimary"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"/>
</FrameLayout>
在res下新建menu包toolbar.xml
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/backup"
android:icon="@drawable/ic_launcher"
android:title="Backip"
app:showAsAction="always"/>
<item
android:id="@+id/delete"
android:icon="@drawable/ic_launcher"
android:title="Delete"
app:showAsAction="ifRoom"/>
<item
android:id="@+id/settings"
android:icon="@drawable/ic_launcher"
android:title="Settings"
app:showAsAction="never"/>
</menu>
MainActivity
package com.example.ldp.com.matarialprojecttest;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.Toolbar;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.toolbar_layout);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.toolbar,menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()){
case R.id.backup:
Toast.makeText(this,"You Click Backeup",Toast.LENGTH_SHORT).show();
break;
case R.id.delete:
Toast.makeText(this,"You Click Delete",Toast.LENGTH_SHORT).show();
break;
case R.id.settings:
Toast.makeText(this,"You Click Settings",Toast.LENGTH_SHORT).show();
break;
default:
break;
}
return true;
}
}
效果图:
Android高级应用之技巧篇
一、打造全局Context上下文
有没有发现我们再很多地方都需要调用context,比如踏出Toast,启动互动的时候,发送广播的时候,发送通知服务的时候。这些地方都需要,而一般情况下只有一个在Activity类下才会有context上下文参数,而我们有很多情况下的逻辑处理又是脱离了Activity活动的,这个时候又应该怎么办呢?
打个比如写一个网络封装类:
如果我们想再执行操作之前,检测一下网络,如果网络不存在直接给它一个return,并且Toast提示一下,不就可以减少很多操作了吗?
在这里就要用context,那又该如何做呢?其实APP启动的时候,就提供了一个Application类,会初始化这个类,用于管理程序内的全局通信,比如context
新建一个类继承Application
public class MyApplication extends Application{
private static Context context;
@Override
public void onCreat(){
context = getApplication();//初始化的时候就获取到Application
LitePalApplication.initalize(context);
//避免自己所配置的application和LitePalApplication的冲突
//不过这个前提是在Application中声明android:name="org.litepal.LitePalApplication"
}
public static Context getContext(){
return context;
}
}
我们需要告知系统,启动时初始化我们新建的这个类,在AndroidManifest.xml中
<application>
android:name="com......MyApplication"
</application
***在我们需要用到context的地方直接MyApplication.getContext()不就直接获取到全局context了嘛
二、Serializable序列化(Parcelable也可以实现,相对复杂点儿)
intent传递数据的时候,遇到要传递对象怎么办?将对象类序列化serializable就好了,至于什么是序列化百度一下就知道了。开发web的哥们儿都知道滴intent.putExtra("person_data",person);//这里的person对象已经序列化,
在下一个意图的时候,得到:Person person = (Person)getIntent().getSerializableExtra("person_data");即可
三、定制一个日志工具
做一个日志工具类即可:当我们在上线之前需要打印日志,而上线的时候,如果程序依然在打印日志,就会造成数据泄露,使用直接做的日志开发工具,当上线的时候直接屏蔽就可以package com.example.ldp.com.matarialprojecttest;
import android.util.Log;
/**
* Created by Administrator on 2017/3/14.
*/
public class LogUtil {
public static final int VERBOSE = 1;
public static final int DEBUG=2;
public static final int INFO=3;
public static final int WARN=4;
public static final int ERROR=5;
public static final int NOTHING=6;
public static final int level =VERBOSE;
public static void v(String tag,String msg){
if(level<=VERBOSE){
Log.v(tag,msg);
}
}
public static void d(String tag,String msg){
if(level<=DEBUG){
Log.d(tag,msg);
}
}
public static void i(String tag,String msg){
if(level<=INFO){
Log.i(tag,msg);
}
}
public static void w(String tag,String msg){
if(level<=WARN){
Log.w(tag,msg);
}
}
public static void e(String tag,String msg){
if(level<=ERROR){
Log.e(tag,msg);
}
}
}
让level等于VERBOSE就可以吧所有的日志打印出,而让level等于WARN打印警告以上的日志。