導航:首頁 > 操作系統 > android44界面

android44界面

發布時間:2022-07-30 11:46:01

㈠ 怎樣去優化安卓app的界面設計

第一點:了解你的目標客戶群的心態 1、做微任務的目標客戶群(如隨時隨地看看新聞,聽聽歌,看看電影,聊聊八卦之類): 這類的解決方案是設計的app最好是小而准,不要大而全。越全的功能應用,只能代表著這個應用在各方面的都很平庸 2、喜歡當工具來使用的目標客戶群:比如找地圖,看天氣,查數據等。 這類的解決方案是 我們盡最大努力的去滿足用戶的情景需求。做到極致和簡單。 3、無聊的客戶群,用來打發消磨時間的:無需求,漫無目的的 這類的解決方案是盡可能展示用戶感興趣的東西,幫助客戶來打發消磨時光。 第二點:APP原型圖的製作和設計討論 這個環節是必不可少的。需要根據設計需求認認真真的來畫畫原型圖。 常用的APP原型圖工具:移動APP原型設計神器 POP 、axure、Foreui等 第三點:APP視覺設計與設計要點 (1)大概設計板塊有APP啟動頁面設計,APP界面設計的尺寸規范,app圖標設計等 一般來說,手機屏幕是從上往下布局的,重要的信息會放在上方。但是在操作上,大部分人都是單手拿手機,常用的操作,要放在界面的下方。 另外還有一個原則,最小的觸摸單位,一般是44個像素。如果再小,你的拇指難以觸碰,或者容易引發誤操作。同時,也不要讓界面太擁擠。 所以,設計師必須用減法設計,這個過程需要花時間思考、簡化元素。 你必須記住:(1)隱藏設計或者減法設計 (2)分區或分類 (3)幫用戶做決策 (4)提高交互創新設計 (5)讓人有爽快感和新奇感 (6)在設計中浸入情感,把握用戶的心理。(談談如何進行產品設計以及產品情感化設計) 一位大師這樣說過「真正的簡約設計是:作品必須不斷的被簡化,一改再改,直到設計最終成形。」 2014年 APP設計風格趨向扁平化和卡片化。卡片,扁平化都會是移動app設計的趨勢!認為卡片設計確實同時兼具了「擬物」和「極簡」2種優勢!

㈡ 如何設計android4.4規范的像素1080x1920的界面

1、尺寸以及解析度:Android的界面尺寸比較流行的有:480*800、720*1280、1080*1920,我們在做設計圖的時候建議是以480*800的尺寸為標准;2、界面基本組成元素:界面基本組成元素包括:狀態欄+導航欄+主菜單欄+內容區域;以480*800的尺寸為標准下的各個元素的高度(其實導航欄和菜單欄每一個應用都或許不一樣,android對於尺寸沒有太明確的數據規范)如下:3、字體:Android系統中,DroidSans是默認字體,與微軟雅黑很像;4、操作欄:1、」操作欄」對於Android應用來說是最重要的設計元素,它通常在應用運行的所有時間都呆在屏幕頂部;2、操作欄的基本布局:1向上+2Spinner視圖控制+3重要操作按鈕+4操作:其中,向上按鈕,點擊後是去到當前界面的上一個層級,非第一層級界面有此按鈕,第一層級界面則無向上按鈕;Spinner是用於展示內容的下拉菜單,其內容包括視圖的快速切換和顯示相關內容的完整信息;操作(actionoverflow)是集合操作欄中不常用的和非重要操作的地方。5、多面板布局:多面板布局的是針對平板電腦,把手機端的目錄視圖和詳情視圖兩個層級的界面,甚至的頁面,復合展示在同一個界面中,有效地利用平板電腦的屏幕空間,扁平化層級結構,簡化導航。這點在iPad上已經運用得相當嫻熟了。6、選擇:Android4.0中的長按與Android2.3及更早期的版本有很大的不同。早期版本長按操作後,是出現情境菜單的浮出層。在Android4.0中,長按後在操作欄的位置會覆蓋一個臨時的情境操作欄,不再彈出情境菜單浮出層。在臨時情境操作欄的環境下,當前界面的內容項允許被單個處理,也允許被批量處理。7、返回和向上:返回按鍵用在手機全局的虛擬導航欄中,基於用戶最近查看的界面歷史,採用時間倒序的方式,連接界面間的關系。向上按鈕用在操作欄的左側,基於層級結構,點擊後是去到當前界面的上一個層級,若當前界面已經是最高一級,則沒有向上按鈕。8、主題樣式:推出三套默認主題:Holo淺色主題、Holo深色主題、Holo淺色底+深色操作欄主題。主推app在這三套默認主題的基礎上做設計,以加快app研發效率,但只是建議使用,並沒有完全強制。9、觸摸與反饋:用戶觸摸應用中的可操作區域,應當在視覺上有響應,微小的反饋會給用戶帶來很好地效果;10、按鈕:1、按鈕的3種表現形式如下圖:2、對於僅包括圖標的按鈕,不需要使用背景色;11、滑塊:滑塊的幾種表現形式如下圖:12、進度條:如果某個操作需要花費很長的時間,就需要用進度條的指示和旋轉圈的形式來表示:1、如果你可以知道當前任務完成的比例,那麼使用進度條,讓用戶了解大約還需要多久才能完成;2、當使用旋轉圓圈時,不要配以文字標簽。旋轉的圓圈已經表明了正在進行後台操作。13、開關:用戶通過開關作出選擇,包括3種形式:復選框+單選按鈕+開關;1、復選框:用戶可以在一個集合中作出多個選擇:2、單選按鈕:單選按鈕允許用戶在一個集合中做一次選擇;3、開關:開關控制單個選項的狀態;14、對話框:應用通過對話框讓用戶作出決定或者填寫一些信息,1、對話框的左邊一般情況下是取消按鈕,右邊是確定按鈕;

㈢ 完全一樣安卓4.0手機對比安卓4.0平板

【IT168 評測】在這個Android手機大行其道的時代,現在最熱門的話題是什麼?毫無疑問的是Android4.0。無論是普通用戶還是發燒友,都對這個具有革命性升級的操作系統抱有極大的關注。之所以說Android 4.0有著革命性的升級,主要是因為4.0的界面和之前的Android界面完全不一樣,據谷歌的說法是Android系統在4.0時代將會使手機和平板電腦達到一個統一,也就是說,無論是手機還是平板,都是使用的Android4.0系統,並且用起來的操作方式是一樣的。

評測樣機提供商家:睿風電訊 商家地址:中關村e世界1080 電話:010-57138088


▲Android4.0系統的平板電腦和手機

什麼是安卓4.0?

Android 4.0系統研發代號為Ice Cream Sandwich,簡稱ICS,中文名稱:冰淇淋三明治,是谷歌發布的最新一代手機和平板電腦的操作系統。


▲谷歌總部Android4.0冰激凌三明治的吉祥物

安卓幹嘛要弄這么多版本?

安卓2.0/3.0/4.0都是怎麼回事?

其實要把這事兒說明白了簡單但也復雜。說簡單是因為我一說大家就能明白,說復雜是因為這事兒幾乎要從世界上有貓的那一年說起...

話說,谷歌的Android系統一直是按部就班的升級,1.0到1.5到2.0到2.1到2.2這樣。大家一直相安無事,過著美滿幸福的生活。

但是2010年的時候,蘋果出了iPad這么個東西,賣的挺火,然後很多廠商也想去搞平板電腦,操作系統自然就是首選好用又開源的Android了。但是不要忘了Android系統誕生的時候就是按照一個智能手機的需求去設計的,後來大家就發現,把這么一個手機系統放在平板電腦上會有各種不爽,怎麼辦呢?谷歌說,大家別急,那麼多平板電腦用我們的系統,我們不會不管的,後來谷歌乾脆專門為Android平板電腦重新設計了一個合適的系統(內核一樣但界面UI不同)。為了區別於之前手機的Android 2.x系統,就叫Android 3.0。從此,平板電腦就有了一個專用的系統:Android 3.0。從此以後,平板電腦的系統就是3.0到3.1到3.2這么按部就班的升級著。

這樣看來,手機有專用的系統,平板也有專用的系統了,應該天下太平了吧?非也,開發人員後來發現想給Android系統的機器做個軟體實在是太麻煩了。本來就要考慮各個品牌不同手機配置和屏幕解析度的差異,這下好了,又來了個Android 3.0,一個程序要做成N個不同的版本(比如QQ就有至少4種版本),開發個軟體還不把我累死啊?本來做Android軟體賺錢就不容易(底下小聲嘟囔:瞧人家IOS...一個給iPhone,一個給iPad,兩個版本就全搞定)。不僅僅是開發者,硬體廠商和谷歌也看到了這點,總不能把精力都放在內耗上吧?

後來,谷歌就做出了一個“艱難”的決定,神馬2.x,神馬3.x,不要區分神馬手機神馬平板了,以後再升級新的系統,用像平板3.0那樣炫酷的界面,要適應平板電腦,也要是適合於手機。這樣手機和平板就都裝一個就行了。軟體開發者省事,用戶無論是用手機還是平板,上手也不費勁。於是Android 4.0誕生了。

手機平板機型和開屏界面

谷歌說了Android 4.0系統手機和平板電腦的統一,那麼以後的Android4.0手機和Android4.0平板就是完全一樣的了?

為了解決大家的疑問,今天筆者就找來了兩台Android4.0設備,一個手機,一個平板電腦。讓兩台機器的界面做一個比較,看看手機版和平板電腦版本的Android4.0有什麼相同和不同的地方。

手機上我們使用了三星的GALAXY Nexus(原生Android4.0),平板電腦則是紐曼K97(使用官方刷機包升級至Android4.0)。


▲紐曼K97和三星GALAXY Nexus

首先看解鎖界面,兩款設備在解鎖界面上幾乎是一樣的,都是一個圓環形的圖標,向左拖動是拍照,向右拖動則是直接解鎖屏幕。


▲Android 4.0 手機鎖屏界面


▲Android 4.0 平板鎖屏界面


▲Android4.0平板和手機的解鎖屏幕操作視頻

主屏和主屏按鈕的布局

打開屏幕,我們看到了Android桌面的主頁面。主頁面看起來基本的風格都是一致的,只是平板進入程序的按鍵在屏幕右上角,而手機的進入程序的按鍵則是在屏幕底部中間,旁邊還有一些程序的快捷鍵。谷歌搜索,數字時間,電池電量等等小細節也都是一致的,只是放在屏幕當中的位置略有差異。手機中基本都是集中在屏幕頂部,而平板則更多的放置在了屏幕底部。

在手機上比較明顯的另一個改變是手機屏幕當中使用了三顆虛擬的觸摸按鍵,也就是說以後的Android4.0手機都不需要在手機屏幕地下搞觸摸鍵了。按鍵直接顯示在屏幕當中,當運行一些全屏程序的時候也可以有效的避免誤觸。

這三個鍵在Android 3.0的平板電腦當中就有這樣的設計,到了Android4.0,手機也和平板電腦都統一為這三科屏幕觸摸鍵了。這三可觸摸鍵的作用分別是:返回,主頁,和程序列表(相當於過去Android手機的長按主頁鍵切換最近運行過的程序)。


▲Android 4.0 手機主屏界面


▲Android 4.0 平板主屏界面


Android 4.0手機和平板進入程序功能表視頻

切換最近程序列表的對比

說到了切換程序,我們就來看下手機和平板切換程序的界面。在最近程序列表的界面上,手機和平板是一樣的。當然,手機的屏幕尺寸小一些,所以程序列表占滿了整個屏幕,而平板上則是佔用了不到一半的屏幕面積。


▲Android 4.0手機 最近程序列表截圖


▲Android 4.0平板 最近程序列表截圖


▲Android 4.0手機和平板 點擊最近程序列表

程序和插件圖標功能表

打開程序的功能表界面,發現手機和平板也是一樣的。頂部有程序和桌面插件的分類。直接向右滑動可以切換程序頁面,劃過程序後則是進入到桌面插件頁面。所有的桌面插件都要在此添加,Android2.x時代的直接長按桌面選擇添加插件的時代已經一去不復返了。


▲Android 4.0手機的程序圖標功能表


▲Android 4.0平板 程序圖標功能表


▲Android 4.0手機和平板 功能表和桌面插件頁面

添加桌面插件的方式

前面說過所有的桌面插件都要在此添加,在Android 4.0當中已經不能靠直接長按桌面選擇添加插件了。下面就讓我們通過截圖看下在4.0系統中,手機和平板電腦要如何添加桌面的小插件。


▲Android 4.0手機 只能從功能表添加桌面插件


▲Android 4.0平板 同樣只能從功能表添加桌面插件


▲Android 4.0手機 長按桌面只能選擇壁紙 不能添加插件


▲Android 4.0平板 長按桌面 同樣只能選擇壁紙 不能添加插件

操作系統內的菜單分欄

前面介紹完主界面,功能表,接下來就是程序菜單界面了。

程序的菜單這里自然是設置菜單了,因為...Android就這么一個菜單,剩下的基本都是圖標形式的。進入設置菜單。雖然顏色主題風格還是一樣的,但是我們可以看出來在平板界面上直接分出了左右兩欄,左邊是目錄欄,右邊則可以顯示出內容。充分利用了平板的大尺寸屏幕優勢。


▲Android4.0平板菜單 分為目錄/內容的分欄顯示

而在手機上,則還是直接的一條下來,每個功能還要點進去,使用別的功能還要返回。


▲Android4.0手機菜單 沒有目錄/內容的分欄顯示

這時手機屏幕豎直的狀況,那麼如果把手機橫過來呢?Android4.0會不會也利用一下寬屏的優勢呢?經過我們的測試,發現手機版本的Android4.0並不能達到這個效果,及時把手機橫過來也不會出現平板系統的那種左右分欄效果,看來,手機的系統和平板的系統在淡淡的結構上還是有著區分的對待的。


▲Android4.0手機橫屏 也不會出現目錄/內容的分欄顯示


▲Android4.0手機橫屏 也不會出現目錄/內容的分欄顯示

對比總結 可升級4.0機型簡介

總結

經過我們的測試,我們可以得出如下的結論:Android4.0的手機系統與平板系統,在界面的顏色主題風格和操作上幾乎是完全一致的,相似度可以達到99%。區別就是Android4.0在平板上的布局位置有一些細節上的小變化。不過即使這樣,也並不會有之前Androi2.0和3.0那樣操作差異比較大的感覺。

當然,雖然系統軟體基本是一樣的,但是手機和平板的硬體還是有不小的差距的,並不是說一台Android4.0手機就可以代替Android平板。

可升級Android4.0機型

我們已經了解到了Android4.0手機系統和Android4.0平板系統的區別,那麼什麼樣的手機能升級到Android 4.0呢?理論上只要是Android可以運行2.3系統,處理器達到1GHz的手機,都可以升級到Android4.0,但是很多沒有官方承諾可以升級的機型只能期待民間高手放出ROM升級包了。


▲528Mhz處理器的G1都可以4.0,不過要靠移植的ROM了


▲玩家保有量大的機型基本都可以升級到Android 4.0,比如這個HTC Sensation(G14)

現在得知可以升級到Android 4.0的手機有下面這些型號(官方承諾可以升級):

三星:GALAXY S2以及之後推出的機型,例如GALAXY Note

索尼愛立信:LT18i,ST18i,MT11i

摩托羅拉:Atrix2(包括)以及之後推出的機型,例如Droid RAZR

HTC:Desire HD之後推出的機型,例如Sensation(G14)

華為Honer榮耀,小米手機


▲近期上市的新款手機基本上官方都會提供升級4.0


▲華為honor榮耀已經升級到了官方的Android4.0

㈣ Android設置界面怎麼做

步驟/方法
1
1、下載設置必備的幾款軟體,分別是LauncherPro、Desktop Visualizer。

2
2、下載Android界面顯示必備的Windows Phone 7的素材包。

3
3、下載透明時鍾插件。

4
4、在以上必備軟體素材下載完畢之後,安裝LauncherPro和Desktop Visualizer以及透明時鍾,把Android界面顯示必備的Windows Phone 7的素材包的素材文件夾,放置到手機SD卡里。

5
5、選擇LauncherPro作為當前默認界面,需在一款空白的屏幕。點擊Android手機的Menu鍵,選擇首選項(Preferences)進入LauncherPro的設置。

6
6、選擇外觀設置,選擇快捷菜單背景,進入圖庫,找到以下圖片,設置即可。
Windows Phone 7界面底部素材

7
7、把LauncherPro的界面設置成五行,在剛剛的設置中找到高級設置,勾選桌面5行圖標。

8
8、回到桌面,把LauncherPro的底部圖標統統清除,長按其中一個,然後選擇更改快捷方式,選擇空白,最後在中間的原點處長按選擇更改快捷方式,選擇程序菜單,再選擇自定義圖標,再到圖庫中選擇上圖的背景圖片即可。在這完成之後,Android界面顯示的Windows Phone 7底部就已經完成。

9
9、在桌面空白處長按,選擇Desktop Visualize(中)的Widget,進入Widget設置界面。在選擇圖標中,選擇影像檔,在圖庫中選擇添加前面下載的小圖片素材,在選擇操作中添加你要打開的程序。
添加Desktop Visualiz的Widget
長按新添加的Widget,拖動小箭頭調整大小。調整完畢後,按返回鍵。 希望可以幫到你

㈤ 寫android程序時怎麼創建一個沒有界面的程序啊,我想寫一個服務程序。

一、
package com.example.zhuanhuan;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

import com.example.zhuanhuan.MainActivity;
import com.example.zhuanhuan.R;
import com.example.zhuanhuan.KkkActivity;

import android.os.Bundle;
import android.os.Environment;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class MainActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button zhuceButton = (Button) findViewById(R.id.button2);
Button dengluButton = (Button) findViewById(R.id.button1);
final EditText yonghumingEditText = (EditText) findViewById(R.id.editText1);
final EditText mimaEditText = (EditText) findViewById(R.id.editText2);

zhuceButton.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
Intent intent = new Intent();
intent.setClass(MainActivity.this, KkkActivity.class);
startActivity(intent);
}
};

dengluButton.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
try {

FileInputStream fis = new FileInputStream(Environment.getExternalStorageDirectory().getPath()+"/"+ yonghumingEditText.getText().toString());
byte[] input = new byte[fis.available()];
while(fis.read(input) != -1 );
fis.close();
//Toast.makeText(getApplicationContext(), new String(input), Toast.LENGTH_SHORT).show();
String mimaString = new String(input);

if (mimaString.equals(mimaEditText.getText().toString())==true) {
Toast.makeText(getApplicationContext(), "成功登陸", Toast.LENGTH_SHORT).show();
Intent intent = new Intent();
intent.setClass(MainActivity.this, QqqActivity.class);
startActivity(intent);
}
else {
Toast.makeText(getApplicationContext(), "用戶名或密碼錯誤", Toast.LENGTH_SHORT).show();
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});

}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}

}
二、
package com.example.zhuanhuan;

import java.security.PublicKey;

import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;

public class QqqActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.qqq);

Button fanhuiButton = (Button) findViewById(R.id.button2);
Button jianceButton = (Button) findViewById(R.id.button1);
jianceButton.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
Toast.makeText(getApplicationContext(), "注冊成功", Toast.LENGTH_SHORT).show();
Intent new = new Intent();
intent.setClass(QqqActivity.this, MainActivity.class);
startActivity(intent);
}
});
fanhuiButton.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
Intent intent = new Intent();
intent.setClass(QqqActivity.this, AaaActivity.class);
startActivity(intent);
}
});

}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.qqq, menu);
return true;
}

}

三、
package com.example.zhuanhuan;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

import com.example.zhuanhuan.MainActivity;
import com.example.zhuanhuan.R;
import android.os.Bundle;
import android.os.Environment;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;

public class KkkActivity extends Activity {

private File writeFile;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.kkk);
Button backButton = (Button) findViewById(R.id.button1);
final EditText yonghumingEditText = (EditText) findViewById(R.id.editText1);
final EditText mimaEditText = (EditText) findViewById(R.id.editText2);

backButton.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub

File writeFile = new File(Environment.getExternalStorageDirectory().getPath(), yonghumingEditText.getText().toString());
if (!writeFile.exists()) {

try {
writeFile.createNewFile();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}

String abcString = mimaEditText.getText().toString();
FileOutputStream fos;

try {

for = new FileOutputStream(writeFile);
fos.write(abcString.getBytes());
fos.flush();
fos.close();

} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Intent intent = new Intent();
intent.setClass(KkkActivity.this, MainActivity.class);
startActivity(intent);

}
});

}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.kkk, menu);
return true;
}

}
四、
package com.example.zhuanhuan;

import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class AaaActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.aaa);

Button jianceButton = (Button) findViewById(R.id.button1);
jianceButton.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
Intent intent = new Intent();
intent.setClass(AaaActivity.this, QqqActivity.class);
startActivity(intent);
}
});

}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.aaa, menu);
return true;
}

}

㈥ android界面跳轉怎麼實現

沒明白你的跳轉是要幹嘛!但是下面給你說下!Intent是跳轉頁面用的
你可以在Button 監聽事件裡面寫Intent in=new Intent(A.this,B.class);startActivity(in);<A指的的當前Activity 的名字,B 是指要跳轉的Activity 的名字,記住要在AndrioidManifest.xml聲明這些Activity,不然會報錯的>

㈦ Android4.0系統怎麼進入設置界面

Android
4.0.4系統進入設置的方法非常簡單,我們只需在待機桌面點擊應用按鈕,在應用列表頁找到設置圖標,輕輕點擊即可進入系統設置界面。

㈧ 如何定製 android 主界面

果你要定製一個Android系統,你想用你自己的Launcher(Home)作主界面來替換Android自己的Home,而且不希望用戶安裝的Launcher來替換掉你的Launcher.
我們可以通過修改Framework來實現這樣的功能。

這里以Android2.1的源代碼為例來實際說明。

1)首先了解一下Android的啟動過程。
Android系統的啟動先從Zygote開始啟動,然後......(中間的過程就不說了).....一直到了SystemServer(framework)這個地方,看到這段代碼:

/**
* This method is called from Zygote to initialize the system. This will cause the native
* services (SurfaceFlinger, AudioFlinger, etc..) to be started. After that it will call back
* up into init2() to start the Android services.
*/
native public static void init1(String[] args);

public static void main(String[] args) {
if (SamplingProfilerIntegration.isEnabled()) {
SamplingProfilerIntegration.start();
timer = new Timer();
timer.schele(new TimerTask() {
@Override
public void run() {
SamplingProfilerIntegration.writeSnapshot("system_server");
}
}, SNAPSHOT_INTERVAL, SNAPSHOT_INTERVAL);
}

// The system server has to run all of the time, so it needs to be
// as efficient as possible with its memory usage.
VMRuntime.getRuntime().setTargetHeapUtilization(0.8f);

System.loadLibrary("android_servers");
init1(args);
}

public static final void init2() {
Log.i(TAG, "Entered the Android system server!");
Thread thr = new ServerThread();
thr.setName("android.server.ServerThread");
thr.start();
}
}

從SystemServer的main函數開始啟動各種服務。
首先啟動init1,然後啟動init2.
從上面的注釋可以看到:init1這個方法時被Zygote調用來初始化系統的,init1會啟動native的服務如SurfaceFlinger,AudioFlinger等等,這些工作做完以後會回調init2來啟動Android的service。

這里我們主要來關注init2的過程。
init2中啟動ServerThread線程,
ServerThread中啟動了一系列的服務,比如這些:

ActivityManagerService
EntropyService
PowerManagerService
TelephonyRegistry
PackageManagerService
AccountManagerService
BatteryService
HardwareService
Watchdog
SensorService
BluetoothService
StatusBarService
ClipboardService
InputMethodManagerService
NetStatService
ConnectivityService
AccessibilityManagerService
NotificationManagerService
MountService
DeviceStorageMonitorService
LocationManagerService
SearchManagerService
FallbackCheckinService
WallpaperManagerService
AudioService
BackupManagerService
AppWidgetService

這些大大小小的服務起來以後,開始
((ActivityManagerService)ActivityManagerNative.getDefault()).systemReady()
在systemReady後開始開始啟動Launcher。

在尋找Launcher的時候是根據HOME的filter(在Manifest中定義的<category android:name="android.intent.category.HOME" />)來過濾。
然後根據filter出來的HOME來啟動,如果只有一個HOME,則啟動這個HOME,如果用戶自己裝了HOME,那就會彈出來一個列表供用戶選擇。

我們現在希望從這里彈出我們自己定製的Launcher,同時也不希望彈出選擇HOME的界面,我們不希望用戶修改我們的home,比如我們的home上放了好多廣告,以及強制安裝的程序,不希望用戶把它幹掉。

我們可以通過這樣來實現:

2) 定義一個私有的filter選項,然後用這個選項來過濾HOME.
一般情況下我們使用Manifest中定義的<category android:name="android.intent.category.HOME"來過濾的,我們現在增加一個私有的HOME_FIRST過濾。

在Intent.java(frameworks/base/core/java/android/content/Intent.java)中添加兩行代碼

//lixinso:添加CATEGORY_HOME_FIRST
@SdkConstant(SdkConstantType.INTENT_CATEGORY)
public static final String CATEGORY_HOME_FIRST = "android.intent.category.HOME_FIRST";

3)修改和CATEGORY_HOME相關的所有的地方,都改成HOME_FIRST,主要是framework中的這幾個地方:

frameworks/base/services/java/com/android/server/am/ActivityManagerService.java中
//intent.addCategory(Intent.CATEGORY_HOME);
改成intent.addCategory(Intent.CATEGORY_HOME_FIRST); //lixinso:
//if (r.intent.hasCategory(Intent.CATEGORY_HOME)) {
改成if (r.intent.hasCategory(Intent.CATEGORY_HOME_FIRST)) { //lixinso: Intent.CATEGORY_HOME -> Intent.CATEGORY_HOME_FIRST

frameworks/base/services/java/com/android/server/am/HistoryRecorder.java中
// _intent.hasCategory(Intent.CATEGORY_HOME) &&
改成 _intent.hasCategory(Intent.CATEGORY_HOME_FIRST) && //lixinso: Intent.CATEGORY_HOME->Intent.CATEGORY_HOME_FIRST

frameworks/policies/base/mid/com/android/internal/policy/impl/MidWindowManager.java中
//mHomeIntent.addCategory(Intent.CATEGORY_HOME);
改成 mHomeIntent.addCategory(Intent.CATEGORY_HOME_FIRST); //lixinso

frameworks/policies/base/mid/com/android/internal/policy/impl/RecentApplicationsDialog.java中
//new Intent(Intent.ACTION_MAIN).addCategory(Intent.CATEGORY_HOME),0);
改成 new Intent(Intent.ACTION_MAIN).addCategory(Intent.CATEGORY_HOME_FIRST),0); //lixinso

frameworks/policies/base/phone/com/android/internal/policy/impl/PhoneWindowManager.java中
//mHomeIntent.addCategory(Intent.CATEGORY_HOME);
改成 mHomeIntent.addCategory(Intent.CATEGORY_HOME_FIRST); //lixinso

frameworks/policies/base/phone/com/android/internal/policy/impl/RecentApplicationsDialog.java中
//ResolveInfo homeInfo = pm.resolveActivity(new Intent(Intent.ACTION_MAIN).addCategory(Intent.CATEGORY_HOME),0);
改成 ResolveInfo homeInfo = pm.resolveActivity(new Intent(Intent.ACTION_MAIN).addCategory(Intent.CATEGORY_HOME_FIRST),0); //lixinso

4) 寫一個自己的Launcher.
可以參考android sample中的Launcher,或者android源代碼中的 /packages/apps/Launcher 來寫。
在Launcher中標記其是不是Launcher的最關鍵的代碼時Manifest中的filter:android:name="android.intent.category.HOME"
現在我們定義了自己的filter,那麼,我們在我們自己寫的Launcher中將Manifest改為:
<application android:process="android.process.acore3" android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".FirstAppActivity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.HOME_FIRST" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.MONKEY" />
</intent-filter>
</activity>
</application>

然後將編譯好的apk放到/out/target/proct/generic/system/app目錄下。

5)將Android自帶的Launcher刪除掉,包括源代碼(packages/apps/Launcher)和apk(/out/target/proct/generic/system/app/Launcher.apk)。

6)
做完這些工作,就可以重新編譯Android了,我們可以編譯修改過的幾個相關的包。
如果之前編譯過了Android源碼,可以用mmm命令來編譯部分的改動。
這里需要這樣編譯:

$ . build/envsetup.sh
$ mmm frameworks/base
$ mmm frameworks/base/services/java
$ mmm frameworks/policies/base/mid
$ mmm frameworks/policies/base/phone

7)
編譯完成後重新生成img文件。
$ make snod

8) 現在可以啟動Android模擬器來看效果了。
首先設置環境變數:
$ export ANDROID_PRODUCT_OUT= ./out/target/proct/generic
然後切換到
$ cd ./out/host/linux-x86/bin
運行
$ ./emulator

這樣我們啟動的模擬器裡面用的image就是我們剛才編譯好的自己定製的東西了。
從模擬器上可以看到啟動的Launcher是我們自己的Launcher,不會出現默認的Launcher了,也不會出現選擇界面。

9)我們再驗證一下,如果用戶裝上了一個其他的Launcher(Home)會怎麼樣。
從網上找一個一般的Launcher或者自己寫一個一般的Launcher裝上去,重新啟動,不會出現選擇界面。
按HOME鍵也不會出來兩個HOME來選擇。

㈨ 華為手機出現android怎麼辦

如果手機進入Fastboot模式,長按電源鍵10s左右強制重啟手機即可退出。

閱讀全文

與android44界面相關的資料

熱點內容
於謙聊天哪個app 瀏覽:447
小鵬汽車nlp演算法工程師薪資 瀏覽:873
代碼加密與隱藏 瀏覽:629
fordfulkerson演算法 瀏覽:350
京東熱app在哪裡可以下載 瀏覽:874
彩報圖書app哪個好 瀏覽:301
新君威20壓縮比 瀏覽:186
手機php整站 瀏覽:915
windows路由跳轉命令 瀏覽:472
量子遺傳演算法程序 瀏覽:222
各編程語言自帶軟體庫 瀏覽:184
編程最少學習多少 瀏覽:403
禪海蠡測語譯pdf 瀏覽:189
伺服器如何設置主城領地 瀏覽:122
android後台發送簡訊 瀏覽:5
mql4編程下載 瀏覽:954
為什麼演算法都用包 瀏覽:190
androidnfc測試 瀏覽:185
孫宇晨演算法 瀏覽:388
安卓11更新內容怎麼刪除 瀏覽:929