『壹』 android如何把QQ登錄界面和自定義對話框結合起來
1、在Android打開設置找到模擬器。
2、在模擬器中輸入qq賬號不輸入密碼,點擊登錄按鈕會顯示提醒對話框。
2、登陸qq後在對話框內輸入賬號和密碼,qq登錄的界面和自定義對話框就會結合起來。
『貳』 32個實用酷炫的Android開源UI框架
1.Side-Menu.Android
分類側滑菜單 , Yalantis 出品。
項目地址: https://github.com/Yalantis/Side-Menu.Android
2.Context-Menu.Android
可以方便快速集成漂亮帶有動畫效果的上下文菜單, Yalantis 出品。
項目地址: https://github.com/Yalantis/Context-Menu.Android
3.Pull-to-Refresh.Rentals-Android
提供一個簡單可以自定義的 下拉刷新 實現,Yalantis 出品。
項目地址: https://github.com/Yalantis/Pull-to-Refresh.Rentals-Android
4.Titanic
可以顯示水位上升下降的TextView
項目地址: https://github.com/RomainPiel/Titanic
5.AndroidSwipeLayout
滑動Layout ,支持單個View,ListView,GridView
項目地址: https://github.com/daimajia/AndroidSwipeLayout
Demo地址: Download Demo
6.Android Typeface Helper
可以幫你輕松實現自定義字體的庫
項目地址: https://github.com/norbsoft/android-typeface-helper
7.android-lockpattern
Android的圖案密碼解鎖
項目地址: https://code.google.com/p/android-lockpattern/
Demo地址: https://play.google.com/store/apps/details?id=group.pals.android.lib.ui.lockpattern.demo
文檔介紹: https://code.google.com/p/android-lockpattern/wiki/QuickUse
APP示例:Android開機的圖案密碼解鎖,支付寶的密碼解鎖
8.ToggleButton
狀態切換的 Button,類似 iOS,用 View 實現
項目地址: https://github.com/zcweng/ToggleButton
9.WilliamChart
繪制圖表的庫,支持LineChartView、BarChartView和StackBarChartView三中圖表類型,並且支持 Android 2.2及以上的系統。
項目地址: https://github.com/diogobernardino/WilliamChart
Demo地址: https://play.google.com/store/apps/details?id=com.db.williamchartdemo
Demo項目: https://github.com/diogobernardino/WilliamChart/tree/master/sample
10.實現滑動ViewPager漸變背景色
項目地址: https://github.com/TaurusXi/GuideBackgroundColorAnimation
11.Euclid
用戶簡歷界面, Yalantis 出品。
項目地址: https://github.com/Yalantis/Euclid
12. InstaMaterial
Instagram的一組Material 風格的概念設計
項目地址: https://github.com/frogermcs/InstaMaterial
13. SpringIndicator
使用bezier實現粘連效果的頁面指示
項目地址: https://github.com/chenupt/SpringIndicator
14. BezierDemo
仿qq消息氣泡拖拽 消失的效果。
項目地址: https://github.com/chenupt/BezierDemo
15. FoldableLayout
折疊的信紙被打開一樣的動畫效果
項目地址: https://github.com/alexvasilkov/FoldableLayout
16.Taurus
下拉刷新,Yalantis 出品。(是不是有點似曾相識呢?)
項目地址: https://github.com/Yalantis/Taurus
17. PersistentSearch
在點擊搜索的時候控制項在原有位置顯示輸入框。
項目地址: https://github.com/Quinny898/PersistentSearch
18. circular-progress-button
帶進度顯示的Button
項目地址: https://github.com/dmytrodanylyk/circular-progress-button
19. discrollview
當上下滾動的時候子元素會呈現不同動畫效果的scrollView,網頁上稱之為:視差滾動
項目地址: https://github.com/flavienlaurent/discrollview
20. sweet-alert-dialog
一個帶動畫效果的 自定義對話框樣式
項目地址: https://github.com/pedant/sweet-alert-dialog
21. android-floating-action-button
Material Desig風格的 浮動操作按鈕
項目地址: https://github.com/futuresimple/android-floating-action-button
22. android-collapse-calendar-view
可以在月視圖與周視圖之間切換的calendar控制項
項目地址: https://github.com/blazsolar/android-collapse-calendar-view
22. android-collapse-calendar-view
可以在月視圖與周視圖之間切換的calendar控制項
項目地址: https://github.com/blazsolar/android-collapse-calendar-view
23. NumberProgressBar
個簡約性感的數字進度條
項目地址: https://github.com/daimajia/NumberProgressBar
24. CircularProgressView
CircularProgressView 是通過自定義view的方式實現的Material風格的載入提示控制項,兼容任何版本。
項目地址: https://github.com/rahatarmanahmed/CircularProgressView
25. OriSim3D-Android
opengl 實現了各種折紙效果,模擬了從一張紙折疊成一條船的整個過程
項目地址: https://github.com/RemiKoutcherawy/OriSim3D-Android
26、萬能日歷控制項:CalendarView
GitHub: https://github.com/huanghaibin-dev/CalendarView
中文使用文檔: https://github.com/huanghaibin-dev/CalendarView/blob/master/QUESTION_ZH.md
27、大圖查看器: BigImage ImageView ViewPager
Github: https://github.com/SherlockGougou/BigImageViewPager
地址: https://www.jianshu.com/p/b15e65791c3f
支持超長圖、超大圖的圖片瀏覽器,優化內存,支持手勢放大、下拉關閉、查看原圖、載入百分比、保存圖片等功能。現已支持androidx。
28、安卓工具包androidUntilCode(安卓必備)
Github: https://github.com/Blankj/AndroidUtilCode/blob/master/lib/utilcode/README-CN.md
29、萬能適配器-BRAVH
官網: http://www.recyclerview.org
GitHub: https://github.com/CymChad/BaseRecyclerViewAdapterHelper
RecyclerView
作為Android最常用的控制項之一,是否常常為「她」操碎了心
BRVAH受益群體是所有Android開發者,希望更多開發者能夠一起來把這個項目做得更好幫助更多人
30、智能刷新控制項--SmartRefreshLayout
GitHub: https://github.com/scwang90/SmartRefreshLayout
中文: https://gitee.com/scwang90/SmartRefreshLayout
SmartRefreshLayout以打造一個強大,穩定,成熟的下拉刷新框架為目標,並集成各種的炫酷、多樣、實用、美觀的Header和Footer。 正如名字所說,SmartRefreshLayout是一個「聰明」或者「智能」的下拉刷新布局,由於它的「智能」,它不只是支持所有的View,還支持多層嵌套的視圖結構。 它繼承自ViewGroup 而不是FrameLayout或LinearLayout,提高了性能。 也吸取了現在流行的各種刷新布局的優點,包括谷歌官方的 SwipeRefreshLayout , 其他第三方的 Ultra-Pull-To-Refresh 、 TwinklingRefreshLayout 。 還集成了各種炫酷的 Header 和 Footer。
31、內存泄漏檢測工具--leakcanary
使用方式: https://www.jianshu.com/p/b83ddffcb3b5
LeakCanary是Square公司基於MAT開源的一個工具,用來檢測Android App中的內存泄露問題。官方地址: https://github.com/square/leakcanary
32、 1218683832 / AndroidSlidingUpPanel
SlidingUpPanelLayout:可以上下滑動的菜單布
https://github.com/1218683832/AndroidSlidingUpPanel
『叄』 Android 如何實現在隱藏鍵盤後,讓輸入框保持當前高度,類似QQ、微信聊天窗口。
當editText獲取焦點的時候,需要直接調用顯示鍵盤命令:<pre t="code" l="java">editText.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if (hasFocus) {
dialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
}
}
});
『肆』 android仿QQ在對應組件位置,彈出選項框是怎麼實現的
這個得用popupwindow吧,dialog是悄檔氏達不到你的效果的,dialog會覆蓋到整個屏幕上面的蠢冊,要麼就啟散修改dialog的theme
『伍』 android qq消息聊天框怎麼做
1. 實現使用ListView顯示聊天信息,聊...
1
2、設計布局1.1.1 activity_main.xml...
2
3、msg_item.xml向layout中添加msg_ite...
3
4、設計MsgAdapter類向項目中添加com.e...
4
5、 完善MainActivity類1.1.1 添加成...
5
6、 添加處理邏輯向onCreate方法中添...
6
7、 運行程序運行程序,查看結果。應...
『陸』 Android如何實現類似於QQ登錄的界面,求大神!
首先程序進入SplashActivity,就是啟動頁面。
xml布局文件就是一個全屏的圖片,要注意的是設置android:scaleType ="matrix"這個屬性。不然不會全屏。
過1秒之後轉入登陸頁面,從圖片我們可以看出,騰訊的UI做的還是相當美觀漂亮的,既簡潔又不失美觀。先分析一下這個登錄界面,從整體可以看出,根布局的
背景色是藍色的,而那個QQ Android其實是一個圖片背景色和根布局的背景色一樣,這樣就不會有視覺偏差。
『柒』 android 中仿QQ顯示說說 用什麼控制項
這個屬於調用系統相冊和系統相機進行圖片選擇的問題
客服端代碼:
[java] view plainprint?
01.package com.cn.lxz.zhaopian;
02.
03.import java.io.File;
04.import java.io.IOException;
05.import java.text.SimpleDateFormat;
06.import java.util.Date;
07.import java.util.HashMap;
08.import java.util.Map;
09.
10.import lxz.utils.android.graphics.GraphicsBitmapUtils;
11.import lxz.utils.android.net.UploadFile;
12.import lxz.utils.android.resource.AndroidClass;
13.
14.import android.app.Activity;
15.import android.app.AlertDialog;
16.import android.content.DialogInterface;
17.import android.content.DialogInterface.OnClickListener;
18.import android.content.Intent;
19.import android.content.res.Resources;
20.import android.graphics.Bitmap;
21.import android.graphics.drawable.BitmapDrawable;
22.import android.graphics.drawable.Drawable;
23.import android.net.Uri;
24.import android.os.Bundle;
25.import android.os.Environment;
26.import android.os.Handler;
27.import android.os.Message;
28.import android.provider.MediaStore;
29.import android.view.View;
30.import android.widget.Button;
31.import android.widget.EditText;
32.import android.widget.ImageView;
33.import android.widget.Toast;
34.
35.public class Activity_UploadPic extends Activity implements Handler.Callback {
36. /** Called when the activity is first created. */
37.
38. ImageView view_pic;
39. Button view_btn;
40. EditText view_et;
41. // 線程通知上傳成功
42. final Handler upLoadhand = new Handler(this);
43. String[] arrayString = { "拍照", "相冊" };
44. String title = "上傳照片";
45.
46. // 上傳的地址
47. String uploadUrl = "http://192.168.1.101:8080/UploadServlet/UploadServlet?";
48. String filename = "照片";
49. private static final int PHOTO_REQUEST_TAKEPHOTO = 1;// 拍照
50. private static final int PHOTO_REQUEST_GALLERY = 2;// 從相冊中選擇
51. private static final int PHOTO_REQUEST_CUT = 3;// 結果
52.
53. @Override
54. public boolean handleMessage(Message msg) {
55.
56. if (msg.obj != null) {
57. Drawable drawable = new BitmapDrawable((Bitmap) msg.obj);
58. view_pic.setBackgroundDrawable(drawable);
59. Toast.makeText(this, "獲得圖片並且頭像上傳成功", 3).show();
60. }else
61. {
62. Toast.makeText(this, "獲得圖片,但是頭像上傳失敗,請注意配置uploadUrl上傳地址", 3).show();
63. }
64.
65. return false;
66. }
67.
68. // 創建一個以當前時間為名稱的文件
69. File tempFile = new File(Environment.getExternalStorageDirectory(),
70. getPhotoFileName());
71.
72. // 對話框
73. OnClickListener onDialogClick = new OnClickListener() {
74. @Override
75. public void onClick(DialogInterface dialog, int which) {
76. switch (which) {
77. case 0:
78. startCamearPicCut(dialog);// 開啟照相
79. break;
80. case 1:
81. startImageCaptrue(dialog);// 開啟圖庫
82. break;
83. default:
84. break;
85. }
86. }
87.
88. private void startCamearPicCut(DialogInterface dialog) {
89. // TODO Auto-generated method stub
90. dialog.dismiss();
91. // 調用系統的拍照功能
92. Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
93.
94. intent.putExtra("camerasensortype", 2);// 調用前置攝像頭
95. intent.putExtra("autofocus", true);// 自動對焦
96. intent.putExtra("fullScreen", false);// 全屏
97. intent.putExtra("showActionIcons", false);
98. // 指定調用相機拍照後照片的儲存路徑
99. intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(tempFile));
100. startActivityForResult(intent, PHOTO_REQUEST_TAKEPHOTO);
101. }
102.
103. private void startImageCaptrue(DialogInterface dialog) {
104. // TODO Auto-generated method stub
105. dialog.dismiss();
106. Intent intent = new Intent(Intent.ACTION_PICK, null);
107. intent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
108. "image/*");
109. startActivityForResult(intent, PHOTO_REQUEST_GALLERY);
110. }
111. };
112.
113. @Override
114. public void onCreate(Bundle savedInstanceState) {
115. super.onCreate(savedInstanceState);
116. setContentView(R.layout.main);
117. init();
118.
119. }
120.
121. private void init() {
122. // TODO Auto-generated method stub
123. view_pic = (ImageView) findViewById(R.id.iv);
124. view_btn = (Button) findViewById(R.id.btn);
125. view_et = (EditText) findViewById(R.id.et);
126. view_btn.setOnClickListener(new View.OnClickListener() {
127.
128. @Override
129. public void onClick(View v) {
130. // TODO Auto-generated method stub
131. AlertDialog.Builder dialog = AndroidClass.getListDialogBuilder(
132. Activity_UploadPic.this, arrayString, title,
133. onDialogClick);
134. dialog.show();
135. }
136. });
137. }
138.
139. // 使用系統當前日期加以調整作為照片的名稱
140. private String getPhotoFileName() {
141. Date date = new Date(System.currentTimeMillis());
142. SimpleDateFormat dateFormat = new SimpleDateFormat(
143. "'IMG'_yyyyMMdd_HHmmss");
144. return dateFormat.format(date) + ".jpg";
145. }
146.
147. @Override
148. protected void onActivityResult(int requestCode, int resultCode, Intent data) {
149. super.onActivityResult(requestCode, resultCode, data);
150. switch (requestCode) {
151. case PHOTO_REQUEST_TAKEPHOTO:
152. startPhotoZoom(Uri.fromFile(tempFile), 150);
153. break;
154.
155. case PHOTO_REQUEST_GALLERY:
156. if (data != null) {
157. startPhotoZoom(data.getData(), 150);
158. }
159. break;
160.
161. case PHOTO_REQUEST_CUT:
162. if (data != null) {
163. setPicToView(data);
164. }
165. break;
166. }
167. super.onActivityResult(requestCode, resultCode, data);
168. }
169.
170. private void startPhotoZoom(Uri uri, int size) {
171. Intent intent = new Intent("com.android.camera.action.CROP");
172. intent.setDataAndType(uri, "image/*");
173. // crop為true是設置在開啟的intent中設置顯示的view可以剪裁
174. intent.putExtra("crop", "true");
175.
176. // aspectX aspectY 是寬高的比例
177. intent.putExtra("aspectX", 1);
178. intent.putExtra("aspectY", 1);
179.
180. // outputX,outputY 是剪裁圖片的寬高
181. intent.putExtra("outputX", size);
182. intent.putExtra("outputY", size);
183. intent.putExtra("return-data", true);
184.
185. startActivityForResult(intent, PHOTO_REQUEST_CUT);
186. }
187.
188. // 將進行剪裁後的圖片顯示到UI界面上
189. private void setPicToView(Intent picdata) {
190. Bundle bundle = picdata.getExtras();
191. if (bundle != null) {
192. final Bitmap photo = bundle.getParcelable("data");
193.
194. new Thread() {
195.
196. @Override
197. public void run() {
198. byte[] photodata = GraphicsBitmapUtils.Bitmap2Bytes(photo);
199. UploadFile uploadFile = new UploadFile(uploadUrl);
200. Map parameters = new HashMap();
201. parameters.put("msg", view_et.getText().toString());
202.
203. boolean isUploadSuccess = false;
204.
205. try {
206. isUploadSuccess = uploadFile.defaultUploadMethod(
207. photodata, filename, parameters);
208. } catch (IOException e) {
209. // TODO Auto-generated catch block
210. e.printStackTrace();
211. }
212.
213. if (isUploadSuccess) {
214. upLoadhand.obtainMessage(0, photo).sendToTarget();
215. } else {
216. upLoadhand.obtainMessage(-1, null).sendToTarget();
217. }
218.
219. }
220. }.start();
221.
222. }
223. }
224.
225.}