扣丁学堂笔记第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);}}



0 0
原创粉丝点击