扣丁学堂笔记第07天高级UI组件(三)
来源:互联网 发布:eia数据今天数据 编辑:程序博客网 时间:2024/05/16 08:37
1.PopupWindow
MainActivity
package com.example.popupwindowtest;import android.app.Activity;import android.os.Bundle;import android.view.Gravity;import android.view.View;import android.view.ViewGroup;import android.view.WindowManager;import android.widget.PopupWindow;public class MainActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);}public void showClick(View view) {View v = getLayoutInflater().inflate(R.layout.popupwindow_layout, null);PopupWindow mPopupWindow = new PopupWindow(v,ViewGroup.LayoutParams.MATCH_PARENT,ViewGroup.LayoutParams.WRAP_CONTENT);//mPopupWindow.getBackground().setAlpha(100); 这句会报空指针异常,表示不解mPopupWindow.setBackgroundDrawable(getResources().getDrawable(android.R.drawable.alert_dark_frame));mPopupWindow.setAnimationStyle(R.style.AppTheme);mPopupWindow.setOutsideTouchable(true);mPopupWindow.setTouchable(true);mPopupWindow.setFocusable(true);mPopupWindow.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);mPopupWindow.showAtLocation(view, Gravity.BOTTOM, 0, 0);}}
popupwindow_layout
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal" > <Button android:id="@+id/edit_btn" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_weight="1" android:text="编辑" /> <Button android:id="@+id/delete_btn" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_weight="1" android:text="删除" /></LinearLayout>
2.Notifications_普通通知
MainActivity
package com.example.notificationtest;import android.app.Activity;import android.app.Notification;import android.app.NotificationManager;import android.content.Context;import android.os.Bundle;import android.view.View;public class MainActivity extends Activity {private static final int NID_1 = 0x1;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);}public void sendClick(View v) {Notification.Builder builder = new Notification.Builder(this);// 通知属性builder.setSmallIcon(R.drawable.ic_launcher);builder.setContentTitle("你有一条新消息");builder.setContentText("生日快乐!");// 创建一个通知Notification n = builder.build();// 创建一个通知管理器,发送通知NotificationManager nm = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);nm.notify(NID_1, n);}}
现在的通知还不能点击,需定义一个pendingIntent,当点击通知时跳转到一个界面(Activity),然后发送意图
使用eclipse的话,别忘了在清单文件注册MainActivity2.java,否则点击通知无反应
MainActivity
package com.example.notificationtest;import android.app.Activity;import android.app.Notification;import android.app.NotificationManager;import android.app.PendingIntent;import android.content.Context;import android.content.Intent;import android.os.Bundle;import android.view.View;public class MainActivity extends Activity {public static final int N_ID = 0x1; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } public void sendClick1(View v){ Notification.Builder builder = new Notification.Builder(this); builder.setSmallIcon(R.drawable.ic_launcher); builder.setContentTitle("你有一条新消息"); builder.setContentText("爱安卓,爱生活!"); builder.setTicker("新消息"); Intent intent = new Intent(this,MainActivity2.class); intent.putExtra("msg", "你是猴子请来的逗比吗?"); PendingIntent pi = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); builder.setContentIntent(pi); Notification n = builder.build(); NotificationManager nm = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); nm.notify(N_ID,n); }}
MainActivity2
package com.example.notificationtest;import android.app.Activity;import android.app.NotificationManager;import android.content.Context;import android.os.Bundle;import android.widget.TextView;public class MainActivity2 extends Activity{@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);setContentView(R.layout.activity_main2);TextView textView = (TextView) findViewById(R.id.tv);String msg = getIntent().getStringExtra("msg");textView.setText(msg);NotificationManager nm = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);nm.cancel(MainActivity.N_ID);}}
3.Notifications_大视图通知
通过调用Notification的InboxStyle()的方法得到一个Notification.InboxStyle对象的实例style,再调用style的setBigContentTitle()、addLine()等方法,再调用builder的setStyle方法吧style实例传进去。
MainActivity
public void sendClick2(View v){ Notification.Builder builder = new Notification.Builder(this); builder.setSmallIcon(R.drawable.ic_launcher); builder.setContentTitle("你有大视图新消息");// sbuilder.setContentText("爱安卓,爱生活!"); builder.setTicker("新消息"); Notification.InboxStyle style = new Notification.InboxStyle(); style.setBigContentTitle("吟诗作对"); style.addLine("长亭外"); style.addLine("古道边"); style.addLine("一行白鹭上青天"); builder.setStyle(style); Notification n = builder.build(); NotificationManager nm = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); nm.notify(N_ID2, n); }
4.Notifications_进度条通知
通过线程的方式来模拟更新
MainActivity
public void sendClick3(View v){ final Notification.Builder builder = new Notification.Builder(this); builder.setSmallIcon(R.drawable.ic_launcher); builder.setContentTitle("更新中"); builder.setContentText("正在由装逼模式更新至牛逼模式……"); builder.setProgress(100, 5, false); final NotificationManager nm = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); nm.notify(N_ID3,builder.build()); new Thread(new Runnable() { public void run() { for(int progress=0;progress<=100;progress+=5){ builder.setProgress(100, progress, false); nm.notify(N_ID3, builder.build()); try {Thread.sleep(500);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();} } builder.setContentText("由于机主逼格不够,更新失败,返回逗逼模式"); nm.notify(N_ID3, builder.build()); } }).start(); }
5.Notifications_自定义视图通知
custom_layout.xml预览图
MainActivity
public void sendClick4(View v){ Notification.Builder builder = new Notification.Builder(this); builder.setSmallIcon(R.drawable.ic_launcher); builder.setTicker("音乐播放器"); RemoteViews views = new RemoteViews(getPackageName(), R.layout.custom_layout); views.setTextViewText(R.id.button_play, "暂停"); views.setTextViewText(R.id.textView_song, "名为你的那个人"); builder.setContent(views); NotificationManager nm = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); nm.notify(N_ID4, builder.build()); }
6.样式和主题_Style
如果需要重复使用相同属性的组件,一个一个配置显得效率太低,可以使用自定义样式来解决属性的重复配置,style的xml位于values目录下
style.xml
<style name="TextViewStyle"> <item name="android:layout_width">wrap_content</item><item name="android:layout_height">wrap_content</item> <item name="android:textSize">35sp</item><item name="android:background">#ff0000</item> </style> <style name="TextViewStyle.Button"> <item name="android:alpha">100</item> </style>
activity_main.xml
<TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="35sp" android:background="#ff0000" android:text="@string/hello_world" /> <TextView style="@style/TextViewStyle" android:text="@string/hello_world"/> <Button style="@style/TextViewStyle.Button"/>
7.样式和主题_Theme
8.自定义组件_实现步骤
9.自定义组件_ScrollView嵌套ListView、GridView的冲突
ScrollView中只能包含一个组件,所以需要一个LinearLayout容纳里面需要的组件
在ScrollView中添加一个足够item的ListView和足够的Button,模拟器显示ListView的item就会有丢失,为了解决冲突,需要新建一个MyListView继承自ListView,重写构造方法,还要添加onMeasure()方法
arrays.xml
<?xml version="1.0" encoding="utf-8"?><resources> <string-array name="name"> <item>安卓1</item> <item>安卓2</item> <item>安卓3</item> <item>安卓4</item> <item>安卓5</item> <item>安卓6</item> <item>安卓7</item> <item>安卓8</item> <item>安卓9</item> <item>安卓10</item> </string-array></resources>
activity_main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context="com.example.scrollviewlistviewtest.MainActivity" > <ScrollView android:layout_width="match_parent" android:layout_height="match_parent" > <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="vertical" > <com.example.scrollviewlistviewtest.MyListView android:id="@+id/listView1" android:layout_width="match_parent" android:layout_height="38dp" android:layout_alignParentLeft="true" android:layout_alignParentTop="true" android:entries="@array/name"> </com.example.scrollviewlistviewtest.MyListView> <Button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Button" /> <Button android:id="@+id/button2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Button" /> <Button android:id="@+id/button3" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Button" /> <Button android:id="@+id/button4" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Button" /> <Button android:id="@+id/button5" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Button" /> <Button android:id="@+id/button6" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Button" /> <Button android:id="@+id/button7" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Button" /> <Button android:id="@+id/button8" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Button" /> </LinearLayout> </ScrollView></LinearLayout>
MyListView.java
package com.example.scrollviewlistviewtest;import android.content.Context;import android.util.AttributeSet;import android.widget.ListView;public class MyListView extends ListView {public MyListView(Context context, AttributeSet attrs, int defStyle) {super(context, attrs, defStyle);// TODO Auto-generated constructor stub}public MyListView(Context context, AttributeSet attrs) {super(context, attrs);// TODO Auto-generated constructor stub}public MyListView(Context context) {super(context);// TODO Auto-generated constructor stub}@Overrideprotected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {// TODO Auto-generated method stubheightMeasureSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,MeasureSpec.AT_MOST);super.onMeasure(widthMeasureSpec, heightMeasureSpec);}}
- 扣丁学堂笔记第07天高级UI组件(三)
- 扣丁学堂笔记第05天高级UI组件(一)
- 扣丁学堂笔记第06天高级UI组件(二)
- 扣丁学堂笔记第03天基础UI组件(一)
- 扣丁学堂笔记第04天基础UI组件(二)
- 扣丁学堂笔记第02天UI布局
- 扣丁学堂笔记第08天Activity组件
- 扣丁学堂笔记第10天Service组件
- 扣丁学堂笔记第17天ContentProvider组件与Loaders
- 扣丁学堂笔记第19天Volley、android-async-http、ksoap2与WebView组件
- 扣丁学堂笔记第09天Intent
- 扣丁学堂笔记第12天Fragments
- 扣丁学堂笔记第14天Handler与多线程
- 扣丁学堂笔记第16天SQLite数据库
- 扣丁学堂笔记第18天HttpURLConnection与HttpClient
- 扣丁学堂笔记第20天动画与图形
- 扣丁学堂笔记第21天Bitmaps与优化
- 扣丁学堂笔记第22天多媒体播放
- poj 2506 Tiling 《大数加法+递推》
- POJ 1611 (并查集,按秩合并)
- iOS 检测版本升级比较好用的第三方类库Harpy的简单使用
- 【HPU】[1736]老王修马路(二)
- 栈的运用(十进制转换八进制,括号匹配问题)
- 扣丁学堂笔记第07天高级UI组件(三)
- 内核态和用户态的区别
- Windows下用VS2013加载caffemodel做图像分类
- matlab 曲线拟合
- Intellj IDEA 启动参数调优
- javascript 事件整理
- (WIP)SSD上的I/O电梯算法与HugePage设置可能导致的Crash(by quqi99)
- grep用法
- 详解C#中的反射