首页 文章 精选 留言 我的

精选列表

搜索[安卓设备管理],共8308篇文章
优秀的个人博客,低调大师

[] 6、列表之ArrayAdapter适配

这个和以前的几个都有点不同,首先这个不用在xml中写对应的控件,而是直接在activity中将整个list实现的:首先要实例化列表和用于存储数据的数组list[9-10],第12-14行放list里加入3个数据,这里最不同的一点是要一个适配器:ArrayAdapter<String> aa ;这个适配器要在第20行实例化,并在21行lv.setAdapter(aa);将适配器数据映射ListView上~ lv = new ListView(this);//实例化列表 list = new ArrayList<String>();//实例化List 1 public class MainActivity extends Activity { 2 private ListView lv ;//声明一个列表 3 private List<String> list ;//声明一个List容器 4 private ArrayAdapter<String> aa ; 5 @Override 6 public void onCreate(Bundle savedInstanceState) { 7 super.onCreate(savedInstanceState); 8 setContentView(R.layout.main); 9 lv = new ListView(this);//实例化列表 10 list = new ArrayList<String>();//实例化List 11 //往容器中添加数据 12 list.add("Item1"); 13 list.add("Item2"); 14 list.add("Item3"); 15 //实例适配器 16 //第一个参数:Context 17 //第二个参数:ListView中每一行布局样式 18 //android.R.layout.simple_list_item_1:系统中每行只显示一行文字布局 19 //第三个参数:列表数据容器 20 aa = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1,list); 21 lv.setAdapter(aa);//将适配器数据映射ListView上 22 //为列表添加监听 23 lv.setOnItemClickListener(new OnItemClickListener() { 24 @Override 25 public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { 26 Toast.makeText(MainActivity.this, "当前选中列表项的下标为:"+arg2, Toast.LENGTH_SHORT).show(); 27 } 28 }); 29 this.setContentView(lv); 30 } 31 } 本文链接:http://www.cnblogs.com/zjutlitao/p/4229837.html 更多精彩:http://www.cnblogs.com/zjutlitao/ 本文转自beautifulzzzz博客园博客,原文链接:http://www.cnblogs.com/zjutlitao/p/4229837.html,如需转载请自行联系原作者

优秀的个人博客,低调大师

[] 1、页面跳转+按钮监听

共2个layout:main.xml和other.xml;2个activity:MainActivity.java,OtherActivity.java 在mainactivity中重写onCreate,第6行设置按钮监听~ 1 public void onCreate(Bundle savedInstanceState) { 2 super.onCreate(savedInstanceState); 3 setContentView(R.layout.main); 4 Log.v("MainActivity", "onCreate"); 5 btn = (Button) findViewById(R.id.Main_btn); 6 btn.setOnClickListener(this); 7 //this.finish(); //结束当前MainActivity 8 } 下面是对按钮监听的实现:即当按钮被按下时,跳转到另一页面: 1 @Override 2 public void onClick(View arg0) { 3 if (arg0 == btn) { 4 Intent intent = new Intent(); 5 intent.setClass(this, OtherActivity.class); 6 this.startActivity(intent); 7 } 8 } 另一个activity也类似: 1 public void onCreate(Bundle savedInstanceState) { 2 super.onCreate(savedInstanceState); 3 setContentView(R.layout.other); 4 Log.v("MainActivity", "onCreate"); 5 btn = (Button) findViewById(R.id.Other_btn); 6 btn.setOnClickListener(this); 7 } 1 public void onClick(View arg0) { 2 if (arg0 == btn) { 3 this.finish(); 4 } 5 } 有人会觉得OtherActivity为什么是那个样子的,暂时我也不清楚,先把他的xml文件贴下: 1 <?xml version="1.0" encoding="utf-8"?> 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 android:orientation="vertical" 4 android:layout_width="fill_parent" 5 android:layout_height="fill_parent" 6 > 7 <TextView 8 android:layout_width="fill_parent" 9 android:layout_height="wrap_content" 10 android:text="@string/OtherActiviy_hello" 11 /> 12 <Button 13 android:layout_width="fill_parent" 14 android:layout_height="wrap_content" 15 android:text="@string/OtherActiviy_BtnClose" 16 android:id="@+id/Other_btn" 17 /> 18 </LinearLayout> 本文链接:http://www.cnblogs.com/zjutlitao/p/4229540.html 更多精彩:http://www.cnblogs.com/zjutlitao/ 本文转自beautifulzzzz博客园博客,原文链接:http://www.cnblogs.com/zjutlitao/p/4229540.html,如需转载请自行联系原作者

优秀的个人博客,低调大师

开发笔记——探索EventBus

1、关于EventBus: 组件通讯在Android开发中是不可避免的,随着业务需求的复杂化,代码中需要我们去处理的业务逻辑难度也不断增大。例如多个Fragment之间的数据传递,Service与Activity、Fragment之间的通讯,BroadCast与Activity、Fragment之间的通讯,各种startActivityForResult的使用,繁杂的操作令我们所厌倦,在GitHub上找了下解决方案,发现了一个不错的开源库EventBus,相信很多做过Android开发的朋友都或多或少对此有所了解。 EventBus是一款针对Android优化的发布/订阅事件总线。主要功能是替代Intent,Handler,BroadCast在Fragment,Activity,Service,线程之间传递消息.优点是开销小,代码更优雅。以及将发送者和接收者解耦。 这是EventBus在GitHub上的开源库地址:https://github.com/greenrobot/EventBus EventBus的大体关系是这样的:订阅者(Subscriber)通过订阅事件(Event)到总线,事件发布者(Publisher)发布事件(Event)到总线被订阅者(Subscriber)接收,其实说白了就是软件设计模式里的观察者模式。EventBus在使用的时候就是在合适的地方发布一个事件,使得注册了该事件接收的对象就可以收到通知,进行相应的操作。 2、初探EventBus: 文绉绉的文字描述令人厌烦,直接上代码说话吧,先来看下要实现的效果: 看似很简单的效果,点击按钮跳转界面,利用Intent发送一个消息,然后TextView接收显示。这是传统上的做法,如果真是这样做,那么写这篇文章的就完全没意义了。其实这里就是利用到了EventBus,并没有用到Intent来传递消息。 先来看下具体的代码(记得添加EventBus的引用),然后我再分部来解析: MainActivity.java SecondActivity.java MyEvent 上面的代码很简单,这里只是抛砖引玉并不做太多复杂的操作,大家可以根据自己的项目需求来添加对应的代码。 3、解析代码: 1、注册EventBus: 在添加EventBus的引用后,我们就可以对任意类进行注册绑定和解绑EventBus事件,注册方法和反注册方法很简单,在上面的代码中就可以看出来了,分别是register和unregister,这里的EventBus.getDefault是获取到EventBus实例的意思(单例)。 1 //注册绑定EventBus 2 EventBus.getDefault().register(this); 3 //解绑EventBus 4 EventBus.getDefault().unregister(this); 2、EventBus事件: EventBus很灵活,它对事件不进行任何的限制,也不需要继承或者实现任何类或者接口,可以是任意类型的实体类,好比上面代码提到的MyEvent。 3、EventBus事件发布者: 有了事件之后,我们就可以对事件进行发布,然后可以被订阅这个事件的所有订阅者所接收。发送事件很简单,有两种方法post与postSticky: 1 //立即发送事件 2 EventBus.getDefault().post(Object event); 3 //延迟发送事件 4 EventBus.getDefault().postSticky(Objet event); 4、EventBus事件订阅者: EventBus的事件订阅者可以是任何已经进行注册EventBus的类,订阅者的数量是没有上限的(很重要,下文会提到),这里的订阅有4种方法,这里都是由onEvent开头的,有着一定的区别: 1、onEvent: 如果使用onEvent作为订阅函数,那么该事件在哪个线程发布出来的,onEvent就会在这个线程中运行,也就是说发布事件和接收事件线程在同一个线程。使用这个方法时,在onEvent方法中不能执行耗时操作,如果执行耗时操作容易导致事件分发延迟。 2、onEventMainThread: 如果使用onEventMainThread作为订阅函数,那么不论事件是在哪个线程中发布出来的,onEventMainThread都会在UI线程中执行,接收事件就会在UI线程中运行,这个在Android中是非常有用的,因为在Android中只能在UI线程中跟新UI,所以在onEvnetMainThread方法中是不能执行耗时操作的。 3、onEventBackground: 如果使用onEventBackgrond作为订阅函数,那么如果事件是在UI线程中发布出来的,那么onEventBackground就会在子线程中运行,如果事件本来就是子线程中发布出来的,那么onEventBackground函数直接在该子线程中执行。 4、onEventAsync: 使用这个函数作为订阅函数,那么无论事件在哪个线程发布,都会创建新的子线程在执行onEventAsync。 1 public void onEvent(Object event) {} 2 public void onEventMainThread(Object event) {} 3 public void onEventBackgroundThread(Object event) {} 4 public void onEventAsync(Object event) {} 介绍完EventBus里的所有角色后,我们来理一理订阅/被订阅流程: 首先,要想成为事件订阅者需要先对EventBus进行注册绑定,然后在本类需要去写一个以onEvent开头的方法来接收处理消息事件,再来我们需要一个自定义的事件可以让事件的发布者发布,让事件的订阅者接收。事件的发布可以通过post方法或者是postSticky方法发布。 4、EventBus所带来的一些方便之处: EventBus是一款针对Android优化的发布/订阅事件总线。主要功能是替代Intent,Handler,BroadCast在Fragment,Activity,Service,线程之间传递消息.优点是开销小,代码更优雅。以及将发送者和接收者解耦。这是我们在文章开头所介绍过的,这里就不多说了,说几个在实际开发中所运用到的地方。 例如: 1、当某个页面的某些值发生变化的时候,需要去同时去更改多个页面相对应的值,这时候只要这些类注册订阅了该事件,那么我们就可以很轻松通过post发送消息来进行通讯。 2、某些时候,我们并不希望发布出来的Event立即被消费掉,而是等到时机成熟。比如说,在一个详情页点赞之后,产生一个事件,这个事件并不立即被消费,而是等用户退出详情页回到商品列表之后,接收到该事件,然后刷新Adapter等。其实这就是之前我们用startActivityForResult和onActivityResult做的事情。这里我们就可以利用postSticky来实现这样的机制。 总之,EventBus极大的减轻了我们各种组件之间的通讯复杂度,也大大减少了使用ActivityForResult的麻烦。真实值得极力推荐。 5、理解EventBus 从源码中我们可以知道,当我们在类中注册绑定EventBus的时候,它会去扫描当前类并记录下所有已onEvent开头的方法,存放在一个Map<Key,Value>中,在事件通过post发布之后,EventBus会根据post中实参的类型,去Map中查找对应的方法,并找到了对应的Thread,最终利用Java的反射机制去执行我们的方法。 onEventMainThread表示这个方法会在UI主线程执行。 onEventPostThread表示这个方法会在当前发布事件的线程中执行。 BackgroundThread表示如果在非UI主线程发布的事件,则直接执行,和发布在同一个线程中。如果在UI线程发布的事件,则加入后台任务队列,使用线程池一个接一个调用。 Async加入后台任务队列,使用线程池调用,注意没有BackgroundThread中的一个接一个。 作者:佚名 来源:51CTO

优秀的个人博客,低调大师

应用漏洞检查工具 QARK

QARK 详细介绍 QARK 全称 Quick Android Review Kit。这个工具用来寻找与 Android 应用相关的安全漏洞,包括检查源代码和打包的 APKs。这个工具还可以创建“Proof-of-Concept”可部署的 APKs 或 ADB 命令,能够利用许多它发现的漏洞。不需要 root 测试设备,因为这个工具专注于在其它安全环境下能被利用的漏洞。使用 在交互模式运行: $ python qark.py 在 headless 模式运行: $ python qark.py --source 1 --pathtoapk /Users/foo/qark/sampleApps/goatdroid/goatdroid.apk --exploit 1 --install 1 or $ python qark.py --source 2 -c /Users/foo/qark/sampleApps/goatdroid/goatdroid --manifest /Users/foo/qark/sampleApps/goatdroid/goatdroid/AndroidManifest.xml --exploit 1 --install 1 The sampleApps folder contains sample APKs that you can test against QARK 文章转载自 开源中国社区[https://www.oschina.net]

优秀的个人博客,低调大师

开发环境配置及HelloWorld

一:JAVA 下载地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 1.1 JAVA_HOME 1.2 PATH PATH属性已存在,可直接编辑。作用是用于配置路径,简化命令的输入,其值为:%JAVA_HOME%\bin。 1.3 CLASSPATH 用于编译时JAVA类的路径,注意这里设置的是两个值,(.;)表示的是JVM先搜索当前目录。其值为:.;%JAVA_HOME%\lib\tools.jar。 1.4 测试 配置完毕后,通过cmd运行以下命令:java -version,javac 如果出现返回信息,则设置成功。 二:eclipse 下载地址:http://www.eclipse.org/downloads 三:Android SDK 地址:http://developer.android.com/sdk/index.html。 设置path:C:\mywork\android\sdk\tools 四:ADT 离线包下载地址:http://developer.android.com/sdk/installing/installing-adt.html 下载之后,打开Eclipse→Help→Install New Software,选择Work with:后的Add...→在Local选项中输入Android Plugin→在Archive中找到ADT的压缩包→点击OK→在下面勾选Name中的选项即可。 安装完毕后,选择 Window -> Preferences ,在弹出面板中就会看到Android设置项,填上安装的SDK路径,则会出现刚才在SDK中安装的各平台包,按OK则完成配置。此时Android的环境就搭建完毕,可以进行Android项目的开发了。 五:HelloWorld 选择 File -> New -> Other -> Android -> Android Application Project。 一路NEXT,然后出现: 然后,项目上面点右键 Run As Android,会提示我们创建模拟器,我们设置如下: 最后,我们得到: 本文转自最课程陆敏技博客园博客,原文链接:http://www.cnblogs.com/luminji/p/4541924.html,如需转载请自行联系原作者

优秀的个人博客,低调大师

[] 3、EditText使用小程序

这里比较简单,看下面代码就能知道了:在按钮的点击事件时用String str = et.getText().toString();获取文本内容。 1 public class MainActivity extends Activity implements OnClickListener{ 2 private EditText et;//创建一个文本编辑的对象 3 private Button btn; 4 private TextView tv; 5 @Override 6 public void onCreate(Bundle savedInstanceState) { 7 super.onCreate(savedInstanceState); 8 setContentView(R.layout.main); 9 et= (EditText)findViewById(R.id.et);//实例化文本编辑 10 btn= (Button)findViewById(R.id.btn); 11 btn.setOnClickListener(this); 12 tv = (TextView)findViewById(R.id.tv); 13 } 14 @Override 15 public void onClick(View v) { 16 if(v==btn){ 17 //获取EditText中的文本内容 18 String str = et.getText().toString(); 19 //让TextView将获取到的EditText内容str显示出来 20 tv.setText(str); 21 } 22 } 23 } 注意:从上面的效果可以看出输入框是密码类型,看xml文件就知道了:18行password属性为true. 1 <?xml version="1.0" encoding="utf-8"?> 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 android:orientation="vertical" 4 android:layout_width="fill_parent" 5 android:layout_height="fill_parent" 6 > 7 <TextView 8 android:layout_width="fill_parent" 9 android:layout_height="wrap_content" 10 android:text="@string/hello" 11 android:id="@+id/tv" 12 /> 13 <EditText 14 android:layout_width="fill_parent" 15 android:layout_height="wrap_content" 16 android:hint="提示信息" 17 android:id="@+id/et" 18 android:password="true" 19 /> 20 <Button 21 android:layout_width="fill_parent" 22 android:layout_height="wrap_content" 23 android:text="获取EditText内容!" 24 android:id="@+id/btn" 25 /> 26 </LinearLayout> 本文链接:http://www.cnblogs.com/zjutlitao/p/4229742.html 更多精彩:http://www.cnblogs.com/zjutlitao 本文转自beautifulzzzz博客园博客,原文链接:http://www.cnblogs.com/zjutlitao/p/4229742.html,如需转载请自行联系原作者

优秀的个人博客,低调大师

通过OkHttp获取json数据

使用Http协议访问网络 OkHttp使用 可以很好的获取接口数据!json数据! 支持get和post提交方式!!! 1.引入模块 compile 'com.squareup.okhttp3:okhttp:3.4.1' 然后系统会自动引入模块 2.设置权限 <uses-permission android:name="android.permission.INTERNET" /> 支持上网 3.布局 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent" > <Button android:id="@+id/send_request" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Send Request" /> <ScrollView android:layout_width="match_parent" android:layout_height="match_parent" > <TextView android:id="@+id/response_text" android:layout_width="match_parent" android:layout_height="wrap_content" /> </ScrollView> </LinearLayout> 4.实现功能 点击按钮,获取接口数据并展示 package demo.jq.com.networktest; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.TextView; import java.io.BufferedReader; import java.io.EOFException; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; import okhttp3.FormBody; import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.RequestBody; import okhttp3.Response; /** * @author jim */ public class MainActivity extends AppCompatActivity implements View.OnClickListener{ TextView responseText; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button sendRequest = (Button) findViewById(R.id.send_request); responseText = (TextView) findViewById(R.id.response_text); sendRequest.setOnClickListener(this); } @Override public void onClick(View v) { if (v.getId() == R.id.send_request) { sendRequestWithOkHttp(); } } private void sendRequestWithOkHttp() { // 开启线程来发起网络请求 new Thread(new Runnable() { @Override public void run() { HttpURLConnection connection = null; BufferedReader reader = null; try { OkHttpClient client = new OkHttpClient(); // post请求 RequestBody requestBody = new FormBody.Builder() .add("type","1") .build(); Request request = new Request.Builder() .url("http://devmg.yunlutong.com/api/test/testApi") .post(requestBody) .build(); Response response = client.newCall(request).execute(); String responseData = response.body().string(); showResponse(responseData); } catch (Exception e) { e.printStackTrace(); } finally { if (reader != null) { try { reader.close(); } catch (IOException e) { e.printStackTrace(); } } if (connection != null) { connection.disconnect(); } } } }).start(); } private void showResponse(final String response) { runOnUiThread(new Runnable() { @Override public void run() { responseText.setText(response); } }); } } 本文转自TBHacker博客园博客,原文链接:http://www.cnblogs.com/jiqing9006/p/7705446.html,如需转载请自行联系原作者

优秀的个人博客,低调大师

[] 17、一个简单的例子学侧滑设计——用开源slidingmenu

效果如下: 下面是工程结构: 整个工程包括android-v7、SlidingMenu-lib和主工程SlidingMenuTest部分 其中前两个作为lib,后一个为主工程 主工程包含两个lib工程方法为:(易错点) 选择主工程属性 而主工程包括: 逻辑部分:(SRC)其中MainActivity.java是主入口,在主入口内调用部分函数可加载MainFragment.java所对应的Fragment 而CircleImageView.java主要负责使头像呈圆形用的 显示部分:(layout)activity_main.xml对应主页面,layout_actionbar.xml对应actionbar(actionbar的形式可以通过这个调节), layout_menu.xml是侧栏,item_menu.xml是侧栏中的列表的item(上一节中讲了自定义列表和这个类似) 这里MainActivity协调整体逻辑: 该avtivity中代码比较简洁,一看便知道怎么用fragment的了——17、18 怎么设置侧滑——15 怎么设置bar——16 此外,在setmenu中对侧滑栏点击事件的监听和list一样——43to78 一看便会用~而fragment的java文件只写了个类(没内容),圆形头像相关的java不必看(会用即可) 1 public class MainActivity extends ActionBarActivity { 2 3 private LayoutInflater inflator; 4 public static FragmentManager fm; 5 private ActionBar actionBar; 6 private SlidingMenu menu; 7 private ListView menuList; 8 9 @Override 10 protected void onCreate(Bundle savedInstanceState) { 11 super.onCreate(savedInstanceState); 12 setContentView(R.layout.activity_main); 13 14 inflator = (LayoutInflater) MainActivity.this.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 15 setMenu(); 16 setActionBar(); 17 fm=getSupportFragmentManager(); 18 fm.beginTransaction().replace(R.id.content_frame,new MainFragment()).commit();//用MainFragment替换原来的content_fram 19 } 20 21 private void setActionBar(){//自定义actionbar 22 actionBar = getSupportActionBar(); 23 actionBar.setDisplayShowHomeEnabled( false ); 24 actionBar.setDisplayShowCustomEnabled(true); 25 actionBar.setDisplayShowTitleEnabled(false); 26 actionBar.setDisplayHomeAsUpEnabled(false); 27 28 View view = inflator.inflate(R.layout.layout_actionbar, null); 29 ActionBar.LayoutParams layout = new ActionBar.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT); 30 actionBar.setCustomView(view,layout); 31 } 32 33 @SuppressLint("InflateParams") 34 private void setMenu(){ 35 menu = new SlidingMenu(this); 36 menu.setTouchModeAbove(SlidingMenu.TOUCHMODE_MARGIN); 37 menu.setShadowWidthRes(R.dimen.shadow_width); 38 menu.setShadowDrawable(R.drawable.shadow); 39 menu.setBehindWidthRes(R.dimen.slidingmenu_width); 40 menu.setFadeDegree(0.35f); 41 menu.attachToActivity(this, SlidingMenu.SLIDING_WINDOW); 42 43 View view = inflator.inflate(R.layout.layout_menu, null);//设置menu的list及点击监听 44 menuList=(ListView)view.findViewById(R.id.list_menu); 45 final String[] listItems=getResources().getStringArray(R.array.menu_item); 46 menuList.setAdapter(new ArrayAdapter<String>(this, R.layout.item_menu,R.id.text1, listItems)); 47 menuList.setOnItemClickListener(new OnItemClickListener(){ 48 49 @Override 50 public void onItemClick(AdapterView<?> parent, View view, int position, 51 long id) { 52 menu.toggle(); 53 String title; 54 if(position!=3){ 55 title=listItems[position].charAt(0)+" "+listItems[position].charAt(1); 56 }else{ 57 title=listItems[position]; 58 } 59 switch(position){ 60 case 0: 61 // fm.beginTransaction().replace(R.id.content_frame,new TrackFragment()).commit(); 62 break; 63 case 1: 64 // fm.beginTransaction().replace(R.id.content_frame,new TrafficFragment()).commit(); 65 break; 66 case 2: 67 // fm.beginTransaction().replace(R.id.content_frame,new SearchFragment()).commit(); 68 break; 69 case 3: 70 // fm.beginTransaction().replace(R.id.content_frame,new PhoneBookFragment()).commit(); 71 break; 72 case 4: 73 // fm.beginTransaction().replace(R.id.content_frame,new SettingFragment()).commit(); 74 break; 75 } 76 } 77 78 }); 79 menu.setMenu(view); 80 } 81 82 public void onClickMenu(View view){//这个是在layout_actionbar中说好的 83 menu.toggle(); 84 } 85 } 对于layout中的几个文件的关系是: activity_main.xml对应主页面,layout_actionbar.xml对应actionbar(actionbar的形式可以通过这个调节),layout_menu.xml是侧栏,item_menu.xml是侧栏中的列表的item(上一节中讲了自定义列表和这个类似) 这里的主界面就是最简单layout: 1 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 2 xmlns:tools="http://schemas.android.com/tools" 3 android:id="@+id/content_frame" 4 android:layout_width="match_parent" 5 android:layout_height="match_parent" 6 tools:context="com.beautifulzzzz.ui.MainActivity" > 7 8 <TextView 9 android:layout_width="wrap_content" 10 android:layout_height="wrap_content" 11 android:text="@string/hello_world" /> 12 13 </RelativeLayout> actionbar则包含一个图片和一个textview: 这里要注意11行,actionbar上的图标的点击监听已经指明,必须要实现该函数 1 <?xml version="1.0" encoding="utf-8"?> 2 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 android:layout_width="match_parent" 4 android:layout_height="match_parent" > 5 6 <ImageView 7 android:id="@+id/img_menu" 8 android:layout_width="wrap_content" 9 android:layout_height="wrap_content" 10 android:layout_centerVertical="true" 11 android:onClick="onClickMenu" 12 android:src="@drawable/selector_menu" /> 13 14 <TextView 15 android:id="@+id/tv_title" 16 android:layout_width="wrap_content" 17 android:layout_height="wrap_content" 18 android:layout_centerInParent="true" 19 android:textColor="@color/white" 20 android:textSize="20sp" /> 21 22 </RelativeLayout> 侧滑栏的样式稍微复杂点: 上面头像+用户名采用垂直的linearLayout布局,在其中左边是自定义圆形图片,右边是一个textview 这里的button只是为了作为头像部分和list部分的分割线,仅此而已!!! 1 <?xml version="1.0" encoding="utf-8"?> 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 xmlns:app="http://schemas.android.com/apk/res-auto" 4 android:layout_width="150dp" 5 android:layout_height="match_parent" 6 android:background="@color/myblue" 7 android:orientation="vertical"> 8 9 <LinearLayout 10 android:id="@+id/layout_user" 11 android:layout_width="150dp" 12 android:layout_height="wrap_content" 13 android:orientation="horizontal" > 14 15 <com.beautifulzzzz.widget.CircleImageView 16 android:id="@+id/image_userhead" 17 android:layout_width="48dp" 18 android:layout_height="48dp" 19 android:layout_margin="10dp" 20 android:src="@drawable/icon_user_default" 21 app:border_width="0dp" /> 22 23 <TextView 24 android:id="@+id/tv_username" 25 android:layout_width="wrap_content" 26 android:layout_height="wrap_content" 27 android:layout_gravity="center_vertical" 28 android:text="UserName" 29 android:textColor="@color/white" /> 30 </LinearLayout> 31 32 <Button 33 android:layout_width="150dp" 34 android:layout_height="1dp" 35 android:background="@color/blue_line" /> 36 37 <ListView 38 android:id="@+id/list_menu" 39 android:layout_width="150dp" 40 android:layout_height="match_parent" /> 41 42 </LinearLayout> 这里的list的item比较简单(当然你可以参照上一节做出很炫酷的list) 1 <?xml version="1.0" encoding="utf-8"?> 2 <TextView xmlns:android="http://schemas.android.com/apk/res/android" 3 android:id="@+id/text1" 4 android:layout_width="match_parent" 5 android:layout_height="wrap_content" 6 android:textColor="@color/white" 7 android:textSize="20sp" 8 android:padding="10dp" 9 android:gravity="center" /> 注意:整个工程还自定义了一些资源,包括颜色、drawable、按钮动画... 上述工程连接:(一个zip包含3个) http://pan.baidu.com/s/1dDyQjpZ 其他同类博文: 【Android UI设计与开发】9:滑动菜单栏(一)开源项目SlidingMenu的使用和示例 【Android UI设计与开发】第16期:滑动菜单栏(一)开源项目SlidingMenu的使用 @beautifulzzzz 2015-11-11 持续更新中~ 本文转自beautifulzzzz博客园博客,原文链接:http://www.cnblogs.com/zjutlitao/p/4957824.html,如需转载请自行联系原作者

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册