『壹』 android 點擊按鈕時顯示菜單應怎樣實現
點擊button彈出對話框菜單
importandroid.app.Activity;
importandroid.app.AlertDialog;
importandroid.content.DialogInterface;
importandroid.os.Bundle;
importandroid.view.View;
importandroid.view.View.OnClickListener;
importandroid.widget.Button;
{
privateButtonbutton;
/**.*/
@Override
publicvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
button=(Button)findViewById(R.id.button1);
button.setOnClickListener(newOnClickListener(){
@Override
publicvoidonClick(Viewarg0){
newAlertDialog.Builder(choice.this)
.setTitle("choice")
.setItems(R.array.str_body,newDialogInterface.OnClickListener(){
@Override
publicvoidonClick(DialogInterfacearg0,intarg1){
//TODOAuto-generatedmethodstub
String[]aryshop=getResources().getStringArray(R.array.str_body);
newAlertDialog.Builder(choice.this)
.setMessage(aryshop[arg1])
.setNegativeButton("ok",newDialogInterface.OnClickListener(){
@Override
publicvoidonClick(DialogInterfacearg0,intarg1){
//TODOAuto-generatedmethodstub
}
}).show();
}
}).show();
//TODOAuto-generatedmethodstub
}});
}
}
菜單項
<?xmlversion="1.0"encoding="utf-8"?>
<resources>
<stringname="hello">HelloWorld,choice!</string>
<stringname="app_name">ChoiceMenu</string>
<stringname="strtitle">按我選擇:</string>
<stringname="str">你選擇的是:</string>
<arrayname="str_body">
<item>選項1</item>
<item>選項2</item>
<item>選項3</item>
<item>選項4</item>
<item>選項5</item>
<item>選項6</item>
</array>
</resources>
『貳』 Android 沉浸式/透明式狀態欄、導航欄
Android 從4.4開始引進透明狀態欄和導航欄的概念,並且在5.0進行了改進,將透明變成了半透明的效果。雖然此特性最早出現在ios,但不否認效果還是很贊的。
至於4.4以下的手機,就不要考慮此特性了,好在4.4以下的手機份額已經非常小了。
我們先來看一下透明狀態欄的實現,兩種常見效果圖如下:
虛擬導航欄並不是所有的手機都有,華為的手機多比較常見,就是上圖屏幕底部按鈕那塊區域。設置導航欄和狀態欄類似:
這是官方的解釋,大致意思就是我們在布局的最外層設置 android:fitsSystemWindows="true",會在屏幕最上方預留出狀態欄高度的padding。
由於fitsSystemWindows屬性本質上是給當前控制項設置了一個padding,所以我們設置到根布局的話,會導致狀態欄是透明的,並且和窗口背景一樣。
但是多數情況,我們並不在根布局設置這個屬性,我們想要的無外乎是讓內容沉浸在狀態欄之中。所以我們經常設置在最上端的圖片背景、Banner之類的,如果是Toolbar的,我們可以使用一層LinearLayout包裹,並把這個屬性設置給LinearLayout,這樣就可以避免Toolbar的內容下沉了。如:
上述方法可以解決普通頁面的透明式狀態欄需求,如有復雜需求可以參考下面這些:
Android 系統狀態欄沉浸式/透明化完整解決方案
Android 沉浸式狀態欄的實現
Android沉浸式狀態欄(透明狀態欄)最佳實現
還有開源庫推薦: ImmersionBar
『叄』 android UI 怎麼從頂部菜單欄 變成底部菜單欄
實現方式:自定義TabWidget
1、首先創建一個TabWidget的布局文件,main_tab_layout1.xml:
[html] view plain
<?xml version="1.0" encoding="utf-8"?>
<TabHost xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@android:id/tabhost"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<LinearLayout
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<FrameLayout
android:id="@android:id/tabcontent"
android:layout_width="fill_parent"
android:layout_height="0.0dip"
android:layout_weight="1.0" />
<TabWidget
android:id="@android:id/tabs"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:padding="2dip"
android:background="@drawable/tab_widget_background"
android:layout_weight="0.0"/>
</LinearLayout>
</TabHost>
注意:
<1> 不管是使用TabActivity 還是自定義TabHost,都要求以TabHost作為XML布局文件的根;
<2> 將FrameLayout的屬性值layout_weight設置為了1.0,這樣就可以把TabWidget的組件從頂部擠了下來變成了底部菜單欄。
<3> <TabWidger> 和<FrameLayout>的Id 必須使用系統id,分別為android:id/tabs 和 android:id/tabcontent 。因為系統會使用者兩個id來初始化TabHost的兩個實例變數(mTabWidget 和 mTabContent)。
『肆』 android 怎麼實現左側導航欄
Android左側推出導航菜單可以讓Activity繼承PopupWindow類來實現的彈出窗體,布局可以根據自己定義設計。彈出效果主要使用了translate和alpha樣式實現。具體的做法是下列代碼:
第一步:設計彈出窗口xml:
Xml代碼
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:orientation="vertical"
>
<LinearLayout
android:id="@+id/pop_layout"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:orientation="vertical"
android:layout_alignParentBottom="true"
android:background="@drawable/btn_style_alert_dialog_background"
>
<Button
android:id="@+id/btn_take_photo"
android:layout_marginLeft="20dip"
android:layout_marginRight="20dip"
android:layout_marginTop="20dip"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="拍照"
android:background="@drawable/btn_style_alert_dialog_button"
android:textStyle="bold"
/>
<Button
android:id="@+id/btn_pick_photo"
android:layout_marginLeft="20dip"
android:layout_marginRight="20dip"
android:layout_marginTop="5dip"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="從相冊選擇"
android:background="@drawable/btn_style_alert_dialog_button"
android:textStyle="bold"
/>
<Button
android:id="@+id/btn_cancel"
android:layout_marginLeft="20dip"
android:layout_marginRight="20dip"
android:layout_marginTop="15dip"
android:layout_marginBottom="15dip"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="取消"
android:background="@drawable/btn_style_alert_dialog_cancel"
android:textColor="#ffffff"
android:textStyle="bold"
/>
</LinearLayout>
</RelativeLayout>
第二步:創建SelectPicPopupWindow類繼承PopupWindow:
Java代碼
import android.app.Activity;
import android.content.Context;
import android.graphics.drawable.ColorDrawable;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnTouchListener;
import android.view.ViewGroup.LayoutParams;
import android.widget.Button;
import android.widget.PopupWindow;
public class SelectPicPopupWindow extends PopupWindow {
private Button btn_take_photo, btn_pick_photo, btn_cancel;
private View mMenuView;
public SelectPicPopupWindow(Activity context,OnClickListener itemsOnClick) {
super(context);
LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
mMenuView = inflater.inflate(R.layout.alert_dialog, null);
btn_take_photo = (Button) mMenuView.findViewById(R.id.btn_take_photo);
btn_pick_photo = (Button) mMenuView.findViewById(R.id.btn_pick_photo);
btn_cancel = (Button) mMenuView.findViewById(R.id.btn_cancel);
//取消按鈕
btn_cancel.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
//銷毀彈出框
dismiss();
}
});
//設置按鈕監聽
btn_pick_photo.setOnClickListener(itemsOnClick);
btn_take_photo.setOnClickListener(itemsOnClick);
//設置SelectPicPopupWindow的View
this.setContentView(mMenuView);
//設置SelectPicPopupWindow彈出窗體的寬
this.setWidth(LayoutParams.FILL_PARENT);
//設置SelectPicPopupWindow彈出窗體的高
this.setHeight(LayoutParams.WRAP_CONTENT);
//設置SelectPicPopupWindow彈出窗體可點擊
this.setFocusable(true);
//設置SelectPicPopupWindow彈出窗體動畫效果
this.setAnimationStyle(R.style.AnimBottom);
//實例化一個ColorDrawable顏色為半透明
ColorDrawable dw = new ColorDrawable(0xb0000000);
//設置SelectPicPopupWindow彈出窗體的背景
this.setBackgroundDrawable(dw);
//mMenuView添加OnTouchListener監聽判斷獲取觸屏位置如果在選擇框外面則銷毀彈出框
mMenuView.setOnTouchListener(new OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
int height = mMenuView.findViewById(R.id.pop_layout).getTop();
int y=(int) event.getY();
if(event.getAction()==MotionEvent.ACTION_UP){
if(y<height){
dismiss();
}
}
return true;
}
});
}
}
第三步:編寫MainActivity類實現測試:
Java代碼
import android.app.Activity;
import android.os.Bundle;
import android.view.Gravity;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.TextView;
public class MainActivity extends Activity {
//自定義的彈出框類
SelectPicPopupWindow menuWindow;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TextView tv = (TextView) this.findViewById(R.id.text);
//把文字控制項添加監聽,點擊彈出自定義窗口
tv.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
//實例化SelectPicPopupWindow
menuWindow = new SelectPicPopupWindow(MainActivity.this, itemsOnClick);
//顯示窗口
menuWindow.showAtLocation(MainActivity.this.findViewById(R.id.main), Gravity.BOTTOM|Gravity.CENTER_HORIZONTAL, 0, 0); //設置layout在PopupWindow中顯示的位置
}
});
}
//為彈出窗口實現監聽類
private OnClickListener itemsOnClick = new OnClickListener(){
public void onClick(View v) {
menuWindow.dismiss();
switch (v.getId()) {
case R.id.btn_take_photo:
break;
case R.id.btn_pick_photo:
break;
default:
break;
}
}
};
}
上述的代碼實現了從底部彈出,也可以根據PopupWindow類設置從左下部彈出。
Android的對話框有兩種:PopupWindow和AlertDialog。它們的不同點在於:
AlertDialog的位置固定,而PopupWindow的位置可以隨意
AlertDialog是非阻塞線程的,而PopupWindow是阻塞線程的
PopupWindow的位置按照有無偏移分,可以分為偏移和無偏移兩種;按照參照物的不同,可以分為相對於某個控制項(Anchor錨)和相對於父控制項。具體如下
showAsDropDown(View anchor):相對某個控制項的位置(正左下方),無偏移
showAsDropDown(View anchor, int xoff, int yoff):相對某個控制項的位置,有偏移
showAtLocation(View parent, int gravity, int x, int y):相對於父控制項的位置(例如正中央Gravity.CENTER,下方Gravity.BOTTOM等),可以設置偏移或無偏移
『伍』 Android濡備綍瀹炵幇綾諱技鍥劇墖涓鐨勯《閮ㄨ彍鍗
鍦╝ndroid甯冨矓涓錛屾湁涓涓猅abWidget鏍囩撅紝灝辨槸瀹炵幇榪欑嶆晥鏋滅殑錛屽傛灉浣犺夊緱榪欑嶆牱瀛愪笉濂界湅錛屽彲浠ヨ嚜瀹氫箟
『陸』 android中怎麼實現菜單欄的分屏滑動
1、BIOS下修改選項(以H61為例,H81/Q87等其他晶元組BIOS界面基本一致); 開機按F1進入bios選擇Devices; 將Select Active Video更改為IDG(集顯優先),該選項默認為AUTO(自動),然後將Multi-Monitor Support(多顯示支持)修改為Enabled;F10保存後重啟; 2、顯示器接集成顯卡輸出口,先在系統下卸載獨立顯卡驅動,然後依次安裝集成顯卡驅動和獨立顯卡驅動。 安裝完設備顯示狀態; 3、操作方法: a、若Win7&Win8等系統,直接按win+p切換成擴展模式; b、若Win xp系統,需要在顯卡控制台中進行設置; c、集成顯卡和獨立顯卡分別連接的顯示器,只能實現擴展模式,若集成顯卡連接的兩個顯示器,或是獨立顯卡連接的兩個顯示器可以實現復制和擴展; 備註: 1、Win7&Win8系統下,Win+P即可實現雙屏; 2、修改BIOS參數之後,需要先卸載獨立顯卡驅動後安裝集成-獨立兩個驅動; 3、此方案只能支持擴展不能實現復制功能。