android指示器
A. Android ExpandableListView使用小結(一)
ExpandableListView 是什麼?
官方 給出的解釋是:
A view that shows items in a vertically scrolling two-level list. This differs from the ListView by allowing two levels: groups which can indivially be expanded to show its children. The items come from the ExpandableListAdapter associated with this view.
簡單翻譯一下就是:
一種用於垂直滾動展示兩級列表的視圖,和 ListView 的不同之處就是它可以展示兩級列表,分組可以單獨展開顯示子選項。這些選項的數據是通過 ExpandableListAdapter 關聯的。
這個 ExpandableListAdapter 又是什麼呢?和 ListView 使用的 BaseAdapter 差不多,都是用來給 View 提供數據、 實例化子布局的。實際使用的時候實現這個介面就可以了。
了解了這么多,我們來親自實戰一下。
到現在基本上完成了,我們來看一下運行效果~~
在下篇文章 Android ExpandableListView使用小結(二) 中,我會分享有關 ExpandableListView 的 Indicator(指示器)的使用,歡迎各位圍觀~
Demo 地址: 點我飛往 GitHub~
B. Android 12系統即將來襲:首批測試機型曝光
令人意想不到的是,距離Android 11發布沒過多久,關於下一代手機系統Android 12的參數信息就陸續曝光。
近日,據媒體XDA報道,一份關於總結Android 12變化的早期草案文檔在網上得以曝光。
據悉,全新的Android 12採用了全新的扁平化設計,用戶界面將由淺米色替代當前的透明背景。
在通知欄中快捷設置的圖標從6個減少至4個,並且每個圖標尺寸變得更大。
同時, 谷歌還對界面中的電池與時間的位置進行了調換,並在右上角添加隱私指示器。
據了解,Android 12除了帶來全新的UI界面,似乎還為用戶增加了新的隱私功能。
通過隱私保護器可監控不同應用對攝像頭與麥克風的調用許可權, 當有應用使用這兩個硬體時,隱私指示器便會呈現出不同的顏色,以此告知用戶,避免用戶在不知情的情況下隱私泄露
此外,當用戶點擊隱私指示器圖標時,可知道是哪款應用正在使用攝像頭、麥克風。
相信使用新版蘋果iOS與小米MIUI系統的用戶,對這項功能並不陌生。
新版系統將在今年上半年亮相,谷歌Pixel系列將是首批支持Android 12的機型。
除此之外,還有三星Galaxy S21、摩托羅拉Edge、Edge+、小米11以及一加9、Poco F2、Realme 8等多款安卓機型。
不過,由於距離Android 12正式發布時間還有一段距離,最終發布時是否支持以上機型目前還未知曉,後續相關信息我們將持續跟蹤,敬請期待。
C. 大神推薦一個好用的Android API!!
那方面的api????
------------------
軟體庫的存在使得Android編碼更方便快捷。在如此多 Android庫中,我們該如何尋找最合適的一款呢?下面我們做了一個列表供你參考。
動畫(Animation)
Android View Animations:強大的動畫庫,通過對它的使用,可以輕松創建各種動畫效果。
RecyclerView Animators:允許操作者使用含炫酷動畫效果的RecyclerView類。
APIs
CloudRail:幫助操作者更快地進行API集成服務。它將多個服務(例如Dropbox,Google Drive和OneDrive)捆綁成一個統一的API。此外,它可自動處理API更新,並保持API的代碼一致。其介面可用於雲存儲,社交,支付等。
Retrofit:Retrofit由Square公司開發,是Android的REST客戶端,其類型安全,可將http API轉換成java介面。
圖表(Charts)
MPAndroidChart:一款強大的圖表生成庫,可在Android上生成圖表,同時還提供8種不同的圖表類型和多種手勢。
AndroidCharts:一款簡單的圖表創建工具,具有自定義的功能。
資料庫(Database)
SQLBrite: 圍繞SQLiteOpenHelper和ContentResolver創建封裝,以在查詢中使用流式語義。
Sugar ORM:使用SQLite資料庫的簡單操作,優勢在於無需編寫SQL查詢。
數據架構(Data Structure)
Eclipse Collections:用於Java的Collections框架,可為容器類型附加迭代方法的操作等。
日期和時間(Date & Time)
TimesSquare for Android:簡單獨立的日歷小部件,可在日歷視圖中選擇日期。
Material Calendar View:移植到Material design的安卓CalendarView。
依賴(Dependencies)
Dagger:進行Android依賴注入的快捷方式。
文檔(Files)
Android-FilePicker:一款照片選擇器,可從列表中選擇圖片或文檔。
Material File Picker:Material design中的文件選擇器。
函數式編程(Functional Programing)
Retrolambda:在Java 7中使用Lambdas的一種操作。
手勢(Gestures)
Sensey:在Android應用程序中添加手勢的簡單操作。
Android 3D Touch – PeekView:類似於iOS上的3D Touch,用以「預覽」程序內容。
藍牙(Bluetooth)
Android-BluetoothSPPLibrary:使用序列化藍牙埠(Bluetooth Serial Port Profile)的簡單操作。
RxAndroidBle:藍牙低耗能處理工具。
相機(Camera)
CameraFilter:使用OpenGL著色器的實時相機濾鏡。
Material Camera:Android開發的快速簡易的相機框架。
位置(Location)
ReactiveLocation:Google Play API的小型但實用的封裝程序,用於獲取位置。
Smart Location Library:簡化位置提供項的庫。
布局(Layout)
Android Swipe Layout:為對象提供滑動布局,如,向左滑動即刪除的操作。
FlexboxLayout :為Android提供框布局,其內容可通過CSS了解。
日誌(Logging)
Logger:Android日誌記錄器。
Hugo:用觸發注釋的方法調用記錄。
地圖(Maps)
AirMapView :用以查看Google Maps API摘要,非常適合沒有Google Play服務的應用程式。
Google地圖的實用程序,如,熱點地圖或標記聚類。
音頻播放器(Audio)
Music Player:含UI的完整音樂播放器。
RxAndroidAudio :封裝帶有Rx支持的Android Audio API RxAndroid音頻播放器。
GIF
android-gif-drawable:使用視圖和可繪制的GIF動圖。
GifView :Android上使用View播放的GIF庫。
圖像(Image)
uCrop:對Android上的圖片進行裁剪的庫。
Glide:Android的媒體管理和圖片載入庫。
視頻播放器(Video)
VideoPlayerManager:對Android MediaPlayer類的使用進行幫助說明的庫。
Easy Video Player:易於操作的視頻播放器,可通過視圖使用。
信息(Messaging)
Chateau:在Android應用中提供聊天功能的框架。
網路(Networking)
OkHttp:Android的HTTP客戶端。
AndroidAsync:基礎級網路協議庫。
消息推送(Push Notifications)
PubNub:用於處理推送通知的商業服務。
Gandalf:用於發送更新或維護相關的通知。
支付(Payments)
Android In-App Billing v3 Library:通過Android v3 API輕松處理應用內置付款的庫。
Checkout:處理應用內購買操作的庫。
安全(Security)
Sodium:輕松做加密,解密,簽名和散列操作的工具。
PiracyChecker:通過使用Google的LVL,防止應用程式被盜用的工具。
文本(Text)
Ticker:顯示滾動文本的UI組件。
MaterialEditText:Material Design的文本輸入器。
字體(Font)
fontbinding:使用數據綁定的XML自定義字體的操作。
Calligraphy:在Android應用程式上使用傳統字體的簡易操作。
用戶界面(User Interface)
Material Design Android Library:在Android中使用Google的Material Design(Android 2.2版)的庫。
Material:將Material Design導入原有應用程序的庫。
指示器(Activity Indicator)
AppIntro:為應用程序創建炫酷簡介,類似於Google原始應用中的。
LolliPin:為應用程序提供pin密碼。
操作按鈕(Buttons)
Android-Bootstrap:通過使用Bootstrape規則,進行諸如在APP中創建按鈕的操作。
Android Morphing Button:Android的操作按鈕,其形狀大小可更改。
表格(Form)
Vertical Stepper Form Library:在Material Design中創建表單的庫。
鍵盤(Keyboard)
KeyboardVisibilityEvent:顯示與隱藏鍵盤的簡單操作。
AndroidKeyboardWatcher:追蹤鍵盤開啟/關閉操作情況的庫。
菜單(Menu)
BottomBar:在Material Design中提供底部導航欄的視圖組件。
Side Menu:為應用程序添加側邊菜單欄的工具。
評分(Rating)
Android-Rate:提醒用戶對應用程序進行評價的簡易庫。
SimpleRatingBar:用於星級評分的UI組件。
滑屏(Slider)
SlidingMenu:輕松為應用程序創建滑動式菜單項。
MaterialDrawer:Android中輕便靈活的抽屜布局式庫。
英語原文:Best Android Libraries for Developers
編譯:開源中國
本站文章除註明轉載外,均為本站原創或編譯。歡迎任何形式的轉載,但請務必註明出處,尊重他人勞動共創開源社區。
轉載請註明:文章轉載自 開源中國社區 [http://www.oschina.net]
本文標題:面向開發者的最佳 Android 庫列表
本文地址:https://www.oschina.net/news/78857/best-android-libraries-for-developers
D. android 控制項
用ViewFlow這個庫,可以用setFlowIndicator這個方法設置指示器,你說的這是其中一種指示器——CircleFlowIndicator(圓點指示器)。
因為我之前沒用過,所以了解的不多,具體用法和代碼例子需要你自行網路了。
E. android viewpager怎麼添加圓形指示器
這個view是自定義的,原生的沒有,建議你可以搜索一下"ViewPager Indicator" 的用法。
F. android中viewpage怎麼用
ViewPager的功能就是可以使視圖滑動,就像Lanucher左右滑動那樣。分三個步驟來使用它:
1.在住布局文件里加入
[html] view plain
<android.support.v4.view.ViewPager 這個組件,注意這個組件是用來顯示左右滑動的界面的,如果不載入xml布局文件,他是不會顯示內容的。
android:id="@+id/viewpager"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center" >
2.載入要顯示的頁卡,
[java] view plain
LayoutInflater lf = getLayoutInflater().from(this);
view1 = lf.inflate(R.layout.layout1, null);
view2 = lf.inflate(R.layout.layout2, null);
view3 = lf.inflate(R.layout.layout3, null);
viewList = new ArrayList<View>();// 將要分頁顯示的View裝入數組中
viewList.add(view1);
viewList.add(view2);
viewList.add(view3);
3.在Activity里實例化ViewPager組件,並設置它的Adapter(就是PagerAdapter,方法與ListView一樣的),在這里一般需要重寫PagerAdapter。
[java] view plain
PagerAdapter pagerAdapter = new PagerAdapter() {
@Override
public boolean isViewFromObject(View arg0, Object arg1) {
return arg0 == arg1;
}
@Override
public int getCount() {
return viewList.size();
}
@Override
public void destroyItem(ViewGroup container, int position,
Object object) {
container.removeView(viewList.get(position));
}
@Override
public int getItemPosition(Object object) {
return super.getItemPosition(object);
}
@Override
public CharSequence getPageTitle(int position) {
return titleList.get(position);
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
container.addView(viewList.get(position));
weibo_button=(Button) findViewById(R.id.button1);
weibo_button.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
intent=new Intent(ViewPagerDemo.this,WeiBoActivity.class);
startActivity(intent);
}
});
return viewList.get(position);
}
};
viewPager.setAdapter(pagerAdapter);
這是重寫PagerAdapter的一個方法,我們還可以這樣做:
[java] view plain
public class MyViewPagerAdapter extends PagerAdapter{
private List<View> mListViews;
public MyViewPagerAdapter(List<View> mListViews) {
this.mListViews = mListViews;//構造方法,參數是我們的頁卡,這樣比較方便。
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView(mListViews.get(position));//刪除頁卡
}
@Override
public Object instantiateItem(ViewGroup container, int position) { //這個方法用來實例化頁卡
container.addView(mListViews.get(position), 0);//添加頁卡
return mListViews.get(position);
}
@Override
public int getCount() {
return mListViews.size();//返回頁卡的數量
}
@Override
public boolean isViewFromObject(View arg0, Object arg1) {
return arg0==arg1;//官方提示這樣寫
}
}
大同小異,有一定很重要,就是我們需要重寫哪些方法。從上面的圖片可以看到,ViewPager的適配器是PagerAdapter,它是基類提供適配器來填充頁面ViewPager內部,你很可能想要使用一個更具體的實現,如FragmentPagerAdapter或FragmentStatePagerAdapter。在這里需要說明一下,其實ViewPager應該和Fragment一起使用,至少谷歌官方是這么想的,但是在3.0之下,我們沒有必要這么做。下面要注意,當你實現一個PagerAdapter,你必須至少覆蓋以下方法:
instantiateItem(ViewGroup, int)
destroyItem(ViewGroup, int, Object)
getCount()
isViewFromObject(View, Object)
從上面的例子中可以看到,我們最少也是實現了上面四個方法,當然如果你想讓程序更健壯或是功能更全面,你可以重寫其他的方法。下面看一下第一個完整的示例代碼:
主頁面Activity:
[java] view plain
package com.example.viewpagerdemo;
import java.util.ArrayList;
import java.util.List;
import android.os.Bundle;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.PagerTabStrip;
import android.support.v4.view.PagerTitleStrip;
import android.support.v4.view.ViewPager;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.Button;
public class ViewPagerDemo extends Activity {
private View view1, view2, view3;//需要滑動的頁卡
private ViewPager viewPager;//viewpager
private PagerTitleStrip pagerTitleStrip;//viewpager的標題
private PagerTabStrip pagerTabStrip;//一個viewpager的指示器,效果就是一個橫的粗的下劃線
private List<View> viewList;//把需要滑動的頁卡添加到這個list中
private List<String> titleList;//viewpager的標題
private Button weibo_button;//button對象,一會用來進入第二個Viewpager的示例
private Intent intent;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_view_pager_demo);
initView();
}
/*在這里需要說明一下,在上面的圖片中我們看到了,PagerTabStrip,PagerTitleStrip,他們其實是viewpager的一個指示器,前者效果就是一個橫的粗的下劃線,後者用來顯示各個頁卡的標題,當然而這也可以共存。在使用他們的時候需要注意,看下面的布局文件,要在android.support.v4.view.ViewPager裡面添加
android.support.v4.view.PagerTabStrip以及android.support.v4.view.PagerTitleStrip。
private void initView() {
viewPager = (ViewPager) findViewById(R.id.viewpager);
//pagerTitleStrip = (PagerTitleStrip) findViewById(R.id.pagertitle);
pagerTabStrip=(PagerTabStrip) findViewById(R.id.pagertab);
pagerTabStrip.setTabIndicatorColor(getResources().getColor(R.color.gold));
pagerTabStrip.setDrawFullUnderline(false);
pagerTabStrip.setBackgroundColor(getResources().getColor(R.color.azure));
pagerTabStrip.setTextSpacing(50);
/*
weibo_button=(Button) findViewById(R.id.button1);
weibo_button.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
intent=new Intent(ViewPagerDemo.this,WeiBoActivity.class);
startActivity(intent);
}
});
*/
view1 = findViewById(R.layout.layout1);
view2 = findViewById(R.layout.layout2);
view3 = findViewById(R.layout.layout3);
LayoutInflater lf = getLayoutInflater().from(this);
view1 = lf.inflate(R.layout.layout1, null);
view2 = lf.inflate(R.layout.layout2, null);
view3 = lf.inflate(R.layout.layout3, null);
viewList = new ArrayList<View>();// 將要分頁顯示的View裝入數組中
viewList.add(view1);
viewList.add(view2);
viewList.add(view3);
titleList = new ArrayList<String>();// 每個頁面的Title數據
titleList.add("wp");
titleList.add("jy");
titleList.add("jh");
PagerAdapter pagerAdapter = new PagerAdapter() {
@Override
public boolean isViewFromObject(View arg0, Object arg1) {
return arg0 == arg1;
}
@Override
public int getCount() {
return viewList.size();
}
@Override
public void destroyItem(ViewGroup container, int position,
Object object) {
container.removeView(viewList.get(position));
}
@Override
public int getItemPosition(Object object) {
return super.getItemPosition(object);
}
@Override
public CharSequence getPageTitle(int position) {
return titleList.get(position);//直接用適配器來完成標題的顯示,所以從上面可以看到,我們沒有使用PagerTitleStrip。當然你可以使用。
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
container.addView(viewList.get(position));
weibo_button=(Button) findViewById(R.id.button1);//這個需要注意,我們是在重寫adapter裡面實例化button組件的,如果你在onCreate()方法里這樣做會報錯的。
weibo_button.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
intent=new Intent(ViewPagerDemo.this,WeiBoActivity.class);
startActivity(intent);
}
});
return viewList.get(position);
}
};
viewPager.setAdapter(pagerAdapter);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_view_pager_demo, menu);
return true;
}
}
它的布局文件:
[java] view plain
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<android.support.v4.view.ViewPager
android:id="@+id/viewpager"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center" >
<android.support.v4.view.PagerTabStrip
android:id="@+id/pagertab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="top"/>
</android.support.v4.view.ViewPager>
</LinearLayout>
<!--注意事項:
1.這里ViewPager和 PagerTabStrip都要把包名寫全了,不然會ClassNotFount
2.API中說:在布局xml把PagerTabStrip當做ViewPager的一個子標簽來用,不能拿出來,不然還是會報錯
3.在PagerTabStrip標簽中可以用屬性android:layout_gravity=TOP|BOTTOM來指定title的位置
4.如果要顯示出PagerTabStrip某一頁的title,需要在ViewPager的adapter中實現getPageTitle(int)-->
G. 谷歌 Android 12 已用上新的通話狀態欄指示器,可顯示通話時長
IT之家 8 月 15 日消息 谷歌正在為 Android 12 推出越來越多的系統外觀改進,IT之家此前報道,Android 12 將為通話過程添加了新的狀態欄指示器,可以在 狀態欄顯示通話時長,並且有新的設計 ,但還沒有推出。
Android 12 Beta 2
Android 11
現在,據外媒 XDA,Google Phone 應用的 68.0.388241074-publicbeta Beta 3 版本中,已經支持了新的通話狀態欄指示器,而且 下拉通知欄中的界面有了新變化 。
可以看到,實裝的下拉通知欄選項(深藍色部分)中,多了聽筒、話筒的控制開關,而且有了通話時間。
H. android如何給viewpager最後一頁設置不同指示器
1.可以在走後一頁添加一個Button或者imageVIew(開始之類的話),點擊button你相應的跳入到主頁面去 通過intent (目前很多應用採用的是這種)
I. android rollpagerview指示器之間的間距怎麼設置
就直接設置啊
J. Android自定義RatingBar(星級評分控制項)
RatingBar是基於SeekBar(拖動條)和ProgressBar(狀態條)的擴展,用星形來顯示等級評定!
RatingBar實現的效果圖:
看著自定義的樣式遠遠比Android自帶的樣式好看多了,用戶體驗度遠遠提升,下面我們就來實現該控制項:
定義根據圖片自定一個RatingBar的背景條,和圖片放到同一個目錄下面
five_rating_bar.xml
backgroud:是用來填充背景圖片的,和進度條非常類似,當我們設置最高評分時(android:numStars),系統就會根據我們的設置,來畫出以星星為單位的背景(假如android:numStars="5",就會畫出5顆灰色的星星)
progress:是用來在背景圖片基礎上進行填充的指示屬性(和進度條類似,第一進度位置)
secondaryProgress:同progress一樣屬於第二進度位置(如果不定義這個,進度條拖動,每次就畫出一整顆星星(亮),第二進度(暗)沒有覆蓋掉第一進度之後的位置,從左往右是拖不出來N.5顆星星的,這樣評分效果就不完整)
style.xml
提取樣式屬於個人習慣,這里可以不提取出來,可以寫在布局文件中,這里RatingBar的樣式是通過style來切換的。
通過 parent屬性來選擇繼承的父類,我們這里繼承RatingBar類。
重新定義 progressDrawable屬性(RatingBar的背景條)
maxHeight和minHeight可以根據我們圖片像素或者其他參考值來設定。
在我們需要用到RatingBar的xml配置文件裡面添加RatingBar控制項。
main.xml
android:isIndicator RatingBar是否是一個指示器(用戶無法進行更改)
android:numStars 顯示的星型數量,必須是一個整形值,像「100」。
android:rating 默認的評分,必須是浮點類型,像「1.2」。
android:stepSize 評分的步長,必須是浮點類型,像「1.2」。
就這么簡單,我們自定義屬於自己的RatingBar,星級評分控制項!