编写警告对话框+硬编码生成界面+国际化+自适应屏幕分辩率+样式与主题

 

 

   1:  package com.example.notification;
   2:   
   3:  import android.net.Uri;
   4:  import android.os.Bundle;
   5:  import android.app.Activity;
   6:  import android.app.AlertDialog;
   7:  import android.app.Notification;
   8:  import android.app.NotificationManager;
   9:  import android.app.PendingIntent;
  10:  import android.content.Context;
  11:  import android.content.DialogInterface;
  12:  import android.content.Intent;
  13:  import android.view.Menu;
  14:  import android.view.View;
  15:  import android.widget.Button;
  16:   
  17:  public class MainActivity extends Activity {
  18:   
  19:      @Override
  20:      protected void onCreate(Bundle savedInstanceState) {
  21:          super.onCreate(savedInstanceState);
  22:          setContentView(R.layout.activity_main);
  23:          Button button = (Button)findViewById(R.id.button);
  24:          
  25:          button.setOnClickListener(new View.OnClickListener() {
  26:              
  27:              @Override
  28:              public void onClick(View v) {
  29:                  // TODO Auto-generated method stub
  30:                  new AlertDialog.Builder(MainActivity.this)
  31:                  .setTitle("sharpandroid")
  32:                  .setMessage("你确定要访问 Android 网站吗?")
  33:                  .setCancelable(false)
  34:                  .setPositiveButton("确定", new DialogInterface.OnClickListener() {
  35:                  public void onClick(DialogInterface dialog, int id) {
  36:                  //创建一个访问“http://www.android.com”网站的意图,
  37:                  //该意图会告知系统打开浏览器,并访问该网址。
  38:                  Intent intent = new Intent(Intent.ACTION_VIEW,
  39:                  Uri.parse("http://www.android.com"));
  40:                  startActivity(intent);
  41:                  }
  42:                  })
  43:                  .setNegativeButton("取消", new DialogInterface.OnClickListener() {
  44:                  public void onClick(DialogInterface dialog, int id) {
  45:                  dialog.cancel(); //删除对话框
  46:                  }
  47:                  }).show();//显示对话框
  48:                 
  49:              }
  50:          });
  51:      }
  52:   
  53:      @Override
  54:      public boolean onCreateOptionsMenu(Menu menu) {
  55:          // Inflate the menu; this adds items to the action bar if it is present.
  56:          getMenuInflater().inflate(R.menu.main, menu);
  57:          return true;
  58:      }
  59:   
  60:  }

AlertDialog.Builder builder = new
AlertDialog.Builder(AlertDialogActivity.this);
创建一个 AlertDialog 类的内部类 Builder 的对象。
� builder.setTitle("sharpandroid")
为 builer 设置标题
� setMessage("你确定要访问 Android 网站吗?")
为 builer 设置消息内容
� setCancelable(false)
设置为 false 后,键盘上的后退键失效。
� setPositiveButton("确定",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
//创建一个访问“
http://www.android.com”网站的意图,
//该意图会告知系统打开浏览器,并访问该网址。
Intent intent = new Intent(Intent.ACTION_VIEW,
Uri.parse("
http://www.android.com"))
;
startActivity(intent);
}
})
添 加 确 定 按 钮 , 并 添 加 对 该 按 钮 的 处 理 事 件 。 本 例 中 的 处 理 事 件 是 访 问
http://www.android.com 网站。
� .setNegativeButton("取消", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id)
{
dialog.cancel(); //删除对话框
}
});
添加拒绝按钮,并添加处理事件,处理结果是删除该对话框。

image

下面介绍一种不用xml文件,而是用.java文件生成布局文件的方法:

   1:  package com.example.dynamiclayout;
   2:   
   3:  import android.os.Bundle;
   4:  import android.app.Activity;
   5:  import android.view.Menu;
   6:  import android.view.ViewGroup;
   7:  import android.widget.LinearLayout;
   8:  import android.widget.TextView;
   9:   
  10:  public class MainActivity extends Activity {
  11:   
  12:      @Override
  13:      protected void onCreate(Bundle savedInstanceState) {
  14:          super.onCreate(savedInstanceState);
  15:          //setContentView(R.layout.activity_main);
  16:          //创建一个线性布局文件
  17:          LinearLayout layout = new LinearLayout(this);
  18:          //创建一个布局参数,确定该线性布局的宽和高。
  19:          LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT, ViewGroup.LayoutParams.FILL_PARENT);
  20:          //把该组件显示在屏幕上
  21:          setContentView(layout,layoutParams);
  22:          //创建一个 TextView
  23:          TextView textView = new  TextView(this);
  24:          //设置 textView 上显示的文字信息
  25:          textView.setText("我来自JAVA,而不是xml文件!");
  26:          //创建一个布局参数,确定该线性布局的宽和高。
  27:          LinearLayout.LayoutParams tLayoutParams = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT, ViewGroup.LayoutParams.FILL_PARENT);
  28:          //将 textView 添加入布局文件中,并在屏幕中显示
  29:          layout.addView(textView,tLayoutParams);
  30:      }
  31:   
  32:      @Override
  33:      public boolean onCreateOptionsMenu(Menu menu) {
  34:          // Inflate the menu; this adds items to the action bar if it is present.
  35:          getMenuInflater().inflate(R.menu.main, menu);
  36:          return true;
  37:      }
  38:   
  39:  }

image

 

 

国际化:

image

一般情况下,只需要将value文件夹改变和drawable 抽屉文件夹改变,然后通过更改手机

的setting,语言包,会自动调入。系统会自动调入你刚刚新建的语言包。这个比较好!没有的话,会

载入默认的包。

以上之文字来自于 values-en-rUS 文件夹下的 strings.xml 文件中。
以上之图片来自于 drawable-en-rUS-hdpi 文件夹下的 sharpandroid.png 文件。
最后补充一点,如果没有对应的国家的 values、drawable 包,如没有 values-en-rUS,
那么默认会使用 values 包下的内容。

image

为hello world  指定样式

<resources xmlns:android="http://schemas.android.com/apk/res/android">

    <!--
        Base application theme, dependent on API level. This theme is replaced
        by AppBaseTheme from res/values-vXX/styles.xml on newer devices.
    -->
    <style name="AppBaseTheme" parent="android:Theme.Light">
        <!--
            Theme customizations available in newer API levels can go in
            res/values-vXX/styles.xml, while customizations related to
            backward-compatibility can go here.
        -->
    </style>

    <!-- Application theme. -->
    <style name="AppTheme" parent="AppBaseTheme">
        <!-- All customizations that are NOT specific to a particular API-level can go here. -->
    </style>

    <style name="sharp"><!-- 为样式定义一个全局的唯一的名字 -->
        <item name = "android:textSize">18px</item><!--name 属性为样式要用在的View 控件持有的属性   -->        
    <item name="android:textColor">#0000CC</item>
    </style>
</resources>
在布局文件中的使用方法:
 <TextView
        style="@style/sharp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="480x320" />

image

image

<style>元素中有一个 parent 属性。这个属性可以让当前样式继承一个父样式,当前样
式可以继承到父样式的值。 当然, 如果父样式的值不符合你的需求, 你也可以对它进行修改,
如下:

<style name="subsharp" parent="@style/sharp">
<item name="android:textColor">#FF0000</item>
</style>

 

如何引用主题 theme

下面代码显示在 AndroidManifest.xml 中如何为应用设置上面定义的主题:
<application android:icon="@drawable/icon" android:label="@string/app_name"
android:theme="@style/sharpTheme">
......
</application>

尽管在定义上, 样式和主题基本相同, 但是它们使用的地方不同。 样式用在单独的 View,
如 : EditText 、 TextView 等 ;主 题通 过 AndroidManifest.xml 中 的 <application> 和
<activity>用在整个应用或者某个 Activity, 主题对整个应用或某个 Activity 进行全局性
影响。如果一个应用使用了主题,同时应用下的 view 也使用了样式,那么当主题与样式属
性发生冲突时,样式的优先级高于主题。
另外 android 系统也定义了一些主题,例如:

<activity android:theme= “@android:style/Theme.Dialog”>,该主题可以让 Activity 看起来像
一个对话框, 如果需要查阅这些主题, 可以在文档的 reference—>android —>R.style 中查看。

posted on 2014-03-13 21:19  zhuxuekui3  阅读(386)  评论(0编辑  收藏  举报