android脚步---不同界面之间切换
对于一个app,可能需要多个界面,使用Button或者其他控件在不同界面之间切换,那么如何做到呢
首先必须明确,一般一个activity.java文件一般只对应一个界面即一个layout.xml文件,还有可能是在一个界面上再引入一个半屏或者全屏,这样需要用到一些手段,例子在下面放出来。
通常需要新建一个java文件,然后进行处理,新建java文件过程如下:New-class-
输入Name,选择继承的类,一般都是选择最通用的安卓原生的activity类,finish之后得到一个新的java文件,为了方便,可以右键,source-override,选择方法重载,比如,oncreate 等
以自己接触到的代码为例:
mTestDialog = new CustomDialog.Builder(this).create(testView2, R.style.FullScreenDialog, Gravity.NO_GRAVITY); mTestDialog.show();
引入一个全屏文件,新建一个CustomDialog.Builder,建立一个testvie2的全屏xml文件的关联dialog,然后显示这个dialog,
CustomDialog.java文件
package com.leadcore.uudatoutie.ui; import com.leadcore.uudatoutie.PhotoUI; import com.leadcore.uudatoutie.R; import com.leadcore.uudatoutie.util.LogMan; import android.app.Dialog; import android.content.Context; import android.content.DialogInterface; import android.graphics.drawable.Drawable; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup.LayoutParams; import android.widget.Button; import android.widget.LinearLayout; import android.widget.TextView; /** * * Create custom Dialog windows for your application * Custom dialogs rely on custom layouts wich allow you to * create and use your own look & feel. * * Under GPL v3 : http://www.gnu.org/licenses/gpl-3.0.html * * @author antoine vianey * */ public class CustomDialog extends Dialog { private static final String TAG = "CustomDialog"; private static View layout; public CustomDialog(Context context, int theme) { super(context, theme); } public CustomDialog(Context context) { super(context); } @Override public void setTitle(CharSequence title) { ((TextView) layout.findViewById(R.id.title)).setText(title); } public void setIcon(Drawable drawable) { ((TextView) layout.findViewById(R.id.title)).setCompoundDrawables(drawable, null, null, null); } /** * Helper class for creating a custom dialog */ public static class Builder { private Context context; private String title; private String message; private String positiveButtonText; // private String negativeButtonText; private View contentView; private DialogInterface.OnClickListener positiveButtonClickListener; // negativeButtonClickListener; public Builder(Context context) { this.context = context; } /** * Set the Dialog message from String * @param title * @return */ public Builder setMessage(String message) { this.message = message; return this; } /** * Set the Dialog message from resource * @param title * @return */ public Builder setMessage(int message) { this.message = (String) context.getText(message); return this; } /** * Set the Dialog title from resource * @param title * @return */ public Builder setTitle(int title) { this.title = (String) context.getText(title); return this; } /** * Set the Dialog title from String * @param title * @return */ public Builder setTitle(String title) { this.title = title; return this; } /** * Set a custom content view for the Dialog. * If a message is set, the contentView is not * added to the Dialog... * @param v * @return */ public Builder setContentView(View v) { this.contentView = v; return this; } /** * Set the positive button resource and it's listener * @param positiveButtonText * @param listener * @return */ public Builder setPositiveButton(int positiveButtonText, DialogInterface.OnClickListener listener) { this.positiveButtonText = (String) context .getText(positiveButtonText); this.positiveButtonClickListener = listener; return this; } /** * Set the positive button text and it's listener * @param positiveButtonText * @param listener * @return */ public Builder setPositiveButton(String positiveButtonText, DialogInterface.OnClickListener listener) { this.positiveButtonText = positiveButtonText; this.positiveButtonClickListener = listener; return this; } /** * Set the negative button resource and it's listener * @param negativeButtonText * @param listener * @return */ // public Builder setNegativeButton(int negativeButtonText, // DialogInterface.OnClickListener listener) { // this.negativeButtonText = (String) context // .getText(negativeButtonText); // this.negativeButtonClickListener = listener; // return this; // } /** * Set the negative button text and it's listener * @param negativeButtonText * @param listener * @return */ // public Builder setNegativeButton(String negativeButtonText, // DialogInterface.OnClickListener listener) { // this.negativeButtonText = negativeButtonText; // this.negativeButtonClickListener = listener; // return this; // } /** * Create the custom dialog */ public CustomDialog create(View view, int style, int gravity) { LayoutInflater inflater = (LayoutInflater) context .getSystemService(Context.LAYOUT_INFLATER_SERVICE); // instantiate the dialog with the custom Theme final CustomDialog dialog = new CustomDialog(context, style); layout = view; // diaLogMan.addContentView(layout, new LayoutParams( // LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT)); // set the dialog title if(title!=null){ ((TextView) layout.findViewById(R.id.title)).setText(title); } // set the confirm button if (positiveButtonText != null) { ((Button) layout.findViewById(R.id.cancelButton)) .setText(positiveButtonText); if (positiveButtonClickListener != null) { ((Button) layout.findViewById(R.id.cancelButton)) .setOnClickListener(new View.OnClickListener() { public void onClick(View v) { LogMan.e(TAG,"positiveButtonClickListener"); positiveButtonClickListener.onClick( dialog, DialogInterface.BUTTON_POSITIVE); dialog.dismiss(); } }); } } else { // // if no confirm button just set the visibility to GONE // layout.findViewById(R.id.cancelButton).setVisibility( // View.GONE); } // set the content message if (message != null) { ((TextView) layout.findViewById( R.id.message)).setText(message); } else if (contentView != null) { // if no message set // add the contentView to the dialog body ((LinearLayout) layout.findViewById(R.id.content)) .removeAllViews(); ((LinearLayout) layout.findViewById(R.id.content)) .addView(contentView, new LayoutParams( LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT)); } dialog.getWindow().setGravity(gravity); dialog.setContentView(layout); return dialog; } } }
如何在其他应用里面仿照这个方法不单要CustomDialog.java文件,还需要扩展Custom-dialog.xml文件
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="wrap_content"> <LinearLayout android:orientation="vertical" android:background="@drawable/photoframe_title" android:layout_width="fill_parent" android:layout_height="@dimen/dialog_title_height" android:gravity="center_vertical"> <TextView android:id="@+id/title" android:paddingRight="10dip" android:paddingLeft="10dip" android:layout_width="wrap_content" android:layout_gravity="center" android:layout_height="wrap_content" style="@style/MyDialogTitle"/> </LinearLayout> <LinearLayout android:id="@+id/content" android:orientation="horizontal" android:background="@android:color/white" android:paddingTop="10dp" android:layout_width="fill_parent" android:layout_height="wrap_content"> <TextView android:id="@+id/share_weixin" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:padding="5dip" android:drawableTop="@drawable/share_weixin" android:text="@string/review_share_weixin" android:gravity="center_horizontal" android:textColor="@color/text_dialog_button_title" android:background="@drawable/bg_pressed"/> <TextView android:id="@+id/share_weixin_guys" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:padding="5dip" android:drawableTop="@drawable/share_weixin_guys" android:text="@string/review_share_weixin_guys" android:gravity="center_horizontal" android:textColor="@color/text_dialog_button_title" android:background="@drawable/bg_pressed"/> <TextView android:id="@+id/share_sina" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:padding="5dip" android:drawableTop="@drawable/share_sina" android:text="@string/review_share_sina" android:gravity="center_horizontal" android:textColor="@color/text_dialog_button_title" android:background="@drawable/bg_pressed"/> <TextView android:id="@+id/share_more" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:padding="5dip" android:drawableTop="@drawable/share_more" android:text="@string/review_share_more" android:gravity="center_horizontal" android:textColor="@color/text_dialog_button_title" android:background="@drawable/bg_pressed"/> </LinearLayout> <LinearLayout android:orientation="horizontal" android:background="@android:color/white" android:layout_width="fill_parent" android:layout_height="wrap_content"> <Button android:id="@+id/cancelButton" android:layout_width="match_parent" style="@style/MyDialogButton" /> </LinearLayout> </LinearLayout>