安卓前端開發(fā)總結(jié)

前言

暑假我在學(xué)校學(xué)習(xí)了一個月的時間 仰坦,在這一個月期間我學(xué)習(xí)了關(guān)于安卓移動前端開發(fā)的一些簡單的知識。之前我對安卓移動開發(fā)可謂是一竅不通丝蹭,老師讓我花前兩周的時間來看了一本關(guān)于移動開發(fā)的書———《第一行代碼》寿烟。就我個人而言感覺這本書非常的好淑际,非常適合一個像我這樣的菜鳥學(xué)習(xí)Java的移動開發(fā),在這本書從下載開發(fā)工具到寫完一個APP的發(fā)布都是非常的詳細(xì)建邓。但這本書里教的東西還是比較有局限的盈厘,僅適合初學(xué)者,很多都是需要自己去百度或者尋找各種書來解答官边》惺郑總而言之,在學(xué)校這一個月的時間我學(xué)到了很多注簿,因為一個月的時間都是專心的學(xué)習(xí)一樣?xùn)|西契吉,這個夏令營過得很有意義,以下是我這個月的學(xué)習(xí)成果诡渴。

常用控件的使用方法(參考書籍'第一行代碼')

  1. TextView

修改布局如下:

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
        android:id="@+id/text_view"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:textSize="24sp"
        android:textColor="#00ff00"
        android:text="jian shu"/>
</LinearLayout>
  • 在布局中添加TextView控件捐晶,它主要用于在界面上顯示一段文本信息。
  • android:id 是給當(dāng)前的元素定義一個唯一的標(biāo)識符,之后可以在代碼中對這個元素進行操作惑灵。
  • android:layout_width和android:layout_height指定了控件的寬度和高度山上,可選值有三種:match_parent、wrap_content和fill_parent,其中match_parent和fill_parent的意義相同英支,現(xiàn)在官方更加推薦使用 match_parent佩憾,match_parent 表示讓當(dāng)前的控件的大小和父布局的大小一樣,也就是由父布局來決定當(dāng)前控件的大小干花,wrap_content 表示讓當(dāng)前控件的大小能包含住里面的內(nèi)容妄帘,也就是由控件的內(nèi)容決定控件的大小。
  • android:gravity是用來指定文件的對齊方式把敢,可選值有: top 寄摆、botton谅辣、left修赞、right、center 等桑阶,可以用“ | ”來同時指定多個值柏副,這里我們指定center , 表示文字在垂直和水平方向上都居中對齊蚣录,如果控件中不添加這個屬性割择,那么布局就默認(rèn)TextView中的文字居左上角對齊。
  • android:textSize 和 android:textColor 表示更改TextView中文字的大小和顏色萎河,Android的字體大小使用sp作為單位荔泳。
  • android:text 表示TextView 中顯示的內(nèi)容。

運行程序虐杯,效果如下:

圖一
  1. Button
    在布局中添加一個Button玛歌,如下:
     <Button
        android:id="@+id/button"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Button"
        android:textAllCaps="false"/>
  • 其他屬性在上面都已經(jīng)介紹過了, android:textAllCaps 比較陌生擎椰,他的作用是對Button中的所有英文字母進行大小寫轉(zhuǎn)換的控制支子,如果不添加此書行,系統(tǒng)默認(rèn)為進行大寫轉(zhuǎn)換达舒≈蹬螅“false” 為禁用大寫轉(zhuǎn)換,
  • 可以在MainActivity中添加一個監(jiān)聽器巩搏,代碼如下:
public class MainActivity extends AppCompatActivity {

   @Override
   protected void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.activity_main);
       Button button = (Button) findViewById(R.id.button);
       button.setOnClickListener(new View.OnClickListener(){
           @Override
           public void onClick(View v) {
               Toast.makeText(MainActivity.this, "簡書", Toast.LENGTH_SHORT).show();
           }
       });
   }
} 

點擊Button按鈕昨登,效果如下圖:

圖二
  1. EditText
    同樣在布局中添加這個控件,代碼如下:
<EditText
       android:id="@+id/edit_text"
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:hint="Welcome"
       android:maxLines="3"/>
  • EditText 允許用戶在控件里輸入和編輯內(nèi)容贯底,并可以在程序中對這些內(nèi)容進行處理丰辣。
  • android:hint 屬性指定了一段提示文本。
  • android:maxLines 指定了 EditText的最大行數(shù),這里我們選最大3行糯俗,這樣當(dāng)輸入的內(nèi)容超過3行時尿褪,文本就會向上滾動,而 EditText 則不會向上拉伸得湘。效果如下圖:


    圖三

    圖四

4.ImageView
同樣在布局中添加此控件:

 <ImageView
       android:id="@+id/image_view"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:src="@drawable/image1"/>
  • ImageView 是一個展示圖片的控件杖玲。
  • android:src為添加照片的屬性,準(zhǔn)備兩張照片放在 drawable文件下淘正。
    我們可以動態(tài)的更改 ImageView 中的圖片摆马,通過修改MainActivity:
public class MainActivity extends AppCompatActivity {

  private ImageView imageView;

  @Override
  protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);
      Button button = (Button) findViewById(R.id.button);
      imageView = (ImageView) findViewById(R.id.image_view);
      button.setOnClickListener(new View.OnClickListener(){
          @Override
          public void onClick(View v) {
              imageView.setImageResource(R.drawable.image2);
          }
      });
  }
}

運行程序,點擊Button 后發(fā)現(xiàn)圖片切換了鸿吆,如下圖:


圖五
圖六

修改布局和MainActivity :

    <ProgressBar
        android:id="@+id/progress_bar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>
public class MainActivity extends AppCompatActivity {

    private ImageView imageView;
    private ProgressBar progressBar;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button button = (Button) findViewById(R.id.button);
        imageView = (ImageView) findViewById(R.id.image_view);
        progressBar = (ProgressBar) findViewById(R.id.progress_bar);
        button.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View v) {
                if (progressBar.getVisibility() == View.GONE) {
                    progressBar.setVisibility(View.VISIBLE);
                } else {
                    progressBar.setVisibility(View.GONE);
                }
            }
        });
    }
}

效果如下圖囤采,可以通過點擊Button按鈕來控制進度條的顯示。

圖七

碎片與活動之間進行通信

  1. 碎片是一種可以嵌入在活動當(dāng)中的UI片段惩淳,他能讓程序更加合理和充分的利用大屏幕的空間蕉毯。雖然碎片都是嵌入在活動中顯示的,可是實際上它們的關(guān)系并沒有那么密切思犁。碎片和活動都是各自存在于一個獨立的類當(dāng)中的代虾,它們之間并沒有那么明顯的方式來直接進行通信。
  2. 為了方便碎片與活動之間進行通信激蹲,F(xiàn)ramentManager提供了一個類似于findViewById()的方法棉磨,專門用于從布局文件中獲取碎片的實例。
    這是在活動中調(diào)取碎片:調(diào)用FragmentManagerf中的indFragmentById()方法
RightFragment rightFragment = (RightFragment) getSupportFragmentManager().findFragmentById(R.id.right_fragment);

這是在碎片中調(diào)用活動:

MainActivity acivity = (MainActivity) getActivity();

提升ListView的運行效率

public View getView(int position, View converView, ViewGroup parent){
Fruit fruit = getItem(position);
View view = LayoutInflater.from(getContext()).inflate(resourceId,parent,false);
ImageView fruitImage = (ImageView) view.findViewById(R.id.furit_image);
TextView fruitName = (TextView) view.findViewById(R.id.furit_name);
fruitImage.setImageResource(fruit.getImageId());
fruitName.setText(fruit.getName());
return view;
}
1 . 以上的ListView的運行效率很低学辱,因為在FruitAdapter的getView()方法中乘瓤,每次都將布局重新加載一遍,當(dāng)ListView快速滾動的時候策泣,這就會成為性能的餓瓶頸衙傀。

 public View getView(int position, View converView, ViewGroup parent){
     Fruit fruit = getItem(position);
     View view;
     if (converView ==null){
         view = LayoutInflater.from(getContext()).inflate(resourceId,parent,false);
     } else {
         view = converView;
     }
     ImageView fruitImage = (ImageView) view.findViewById(R.id.furit_image);
     TextView fruitName = (TextView) view.findViewById(R.id.furit_name);
     fruitImage.setImageResource(fruit.getImageId());
     fruitName.setText(fruit.getName());
     return view;
 }

2 . 如果改為上述,現(xiàn)在我們可以在getView()方法中進行判斷着降,如果cnvertView為null差油,則使用LayoutInfater去加載布局,如果不為null則直接對converView進行崇從用任洞。這樣就大大提高了ListView的運行效率蓄喇,在快速滾動的時候也可以表現(xiàn)出更好的性能。

GridView和Spinner的介紹

在最近的學(xué)習(xí)中交掏,我接觸了GridView妆偏、Spinner。下面我來對他們的簡單介紹:

  1. GridView 是 DataGrid的后繼控件盅弛,在.net framework 2 中钱骂,雖然還存在DataGrid叔锐,但是GridView已經(jīng)走上了歷史的前臺,取代DataGrid的趨勢已是勢不可擋见秽。GridView和DataGrid功能相似愉烙,都是在web頁面中顯示數(shù)據(jù)源中的數(shù)據(jù),將數(shù)據(jù)源中的一行數(shù)據(jù)解取,也就是一條記錄步责,顯示為在web頁面上輸出表格中的一行。在https://baike.baidu.com/item/gridview/6027180?fr=aladdin 中有對GridView的簡單介紹禀苦。
  • 要想實現(xiàn)GridView的顯示蔓肯,主要有三個步驟:1是準(zhǔn)備數(shù)據(jù)源,2是新建適配器振乏,3是加載適配器蔗包。
圖一
  • 但想要比較熟悉的了解和運用Gridview的話,單單有介紹還是不行的慧邮,還要有一些實例作參考调限。下面幾個鏈接的實例都是比較簡單的,對于像我這種初學(xué)者來說還是比較容易看懂的赋咽。
    http://www.cnblogs.com/zzw1994/p/5082591.html
    圖二

http://blog.csdn.net/leichelle/article/details/7951290

  • 這里的實例分了三種情況旧噪,第一個是只顯示圖片的,第二個是顯示圖片文字的(這里的圖片是Android系統(tǒng)自帶的圖片)脓匿,第三個是顯示自定義的圖片文字。
  1. Spinner是一個提供了下拉列表樣式的布局空控件宦赠,如下圖所示:


    圖三

    我本次主要學(xué)習(xí)這個控件來對所選的學(xué)期進行一個下拉選擇陪毡,代碼如下:
    修改mainActivity.java

     protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        spinner = (Spinner) this.findViewById(R.id.spinner1);
        ArrayAdapter adapter = new ArrayAdapter(this,
                android.R.layout.simple_spinner_item, new String[] { " ","16-17-2", "16-17-1",
                "15_16-2","15_16-1","14_15-2","14_15-1","13_14-2"
                ,"13_14-1","12_13-2","12_13-1","11_12-2","11_12-1","10_11-2","10_11-1","09_10-2","09_10-1","08_09-2","08_09-1","07_08-2"
                ,"07_08-1","06_07-2","06_07-1","05_06-2","05_06-1","04_05-2","04_05-1","03_04-2","03_04-1","02_03-2","02_03-1","01_02-2"
                ,"01_02-1" });

        //設(shè)置下拉樣式
        adapter.setDropDownViewResource(android.R.layout.simple_dropdown_item_1line);
        spinner.setAdapter(adapter);
    }

修改activity_main

        <Spinner
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:id="@+id/spinner1"
            android:layout_marginTop="40sp"/>

效果如下圖

圖四

http://www.114la.com/other/rgb.htm

如下圖

圖五

56項App 介紹及其源碼下載地址

在學(xué)習(xí)安卓的移動開發(fā)的時候桅滋,多看看一些開源的代碼非常的有助于自己的提高,所以我在前人的總結(jié)下自己又總結(jié)了一遍可以學(xué)習(xí)借鑒的54個APP的開源代碼身辨。

1. WeChat 高仿微信

高仿微信丐谋,實現(xiàn)功能有: 好友之間文字聊天,表情煌珊,視頻通話号俐,語音, 語音電話定庵,發(fā) 送文件等吏饿。
項目介紹及其源碼下載地址:
http://www.jcodecraeer.com/a/opensource/2015/0619/3087.html

高仿微信
2. 知乎專欄App

第三方的 app踪危,引用作者的描述:“最近一直在利用空余時間開發(fā)一個完 整的 App,名字就叫“專欄”猪落。開發(fā)這個 App 的目的主要是為了練練手贞远,熟悉
開發(fā)一個完整 App 的流 程。就像造房子笨忌,親手打地基兴革,搬磚頭, 壘磚頭蜜唾,還自己裝修(雖然裝修的不好看)”項目介紹及其源碼下載地
址:http://www.jcodecraeer.com/a/opensource/2015/0328/2657.html

知乎專欄App
3. GankMeiZhi

一個妹子圖項目杂曲。通過這個項目,你可能可以學(xué)習(xí)到的內(nèi)容有: 多渠 道打包 使用
ORM 快速操作數(shù)據(jù)庫 訪問網(wǎng)絡(luò)袁余,簡單解析 HTML RecyclerView 瀑布流的使用 RecyclerView 底部加載更多的簡單實現(xiàn) Material Design 的下拉刷

使用最新的 Design 兼容庫 使用 5.0 的 Share 組件或元素動畫 使用 Toolbar 完全替代 ActionBar擎勘。
使用說明:
本項目包含以下知識點:

  • Butter Knife:通過注解綁定 View
  • Realm在:數(shù)據(jù)庫
  • RecyclerView 及 StaggeredGridLayoutManager 瀑布流布局
  • IntentService 實現(xiàn)的后臺網(wǎng)絡(luò)請求
  • Android Design Support Library 中的 CoordinatorLayout
  • 使用 Jsoup 解析 HTML

使用要求

  • Android 4.4 以上

開發(fā)要求

GankMeiZhi
4. 高仿jiandan

高仿煎蛋的 app,數(shù)據(jù)是采用抓包分析出煎蛋的 api颖榜,離線緩存使用GreenDao 實現(xiàn)本地 Sqlite 緩存棚饵。 ps : 煎蛋是一個 2b 青年聚集地。
項目介紹及其源碼下載地址:http://www.codesocang.com/gn/xiangmu/33662.html

高仿jiandan
5. Wegit

一個第三方的Github客戶端掩完,采用mvp架構(gòu)噪漾。
項目介紹及其源碼下載地址:http://www.jcodecraeer.com/a/opensource/2015/0818/3325.html

Wegit
6. SimplifyReader

一款基于Google Material Design設(shè)計開發(fā)的Android客戶端,包括新聞簡讀且蓬,圖片瀏覽欣硼,視頻爽看 ,音樂輕聽以及二維碼掃描五個子模塊恶阴。項目采取的是MVP架構(gòu)開發(fā)诈胜,由于還是摸索階段,可能不是很規(guī)范冯事。但基本上應(yīng)該是這么個套路焦匈。
使用說明:

  • 模塊分析

  • 新聞簡讀
    介紹:API使用的是鳳凰新聞客戶端的接口,我只是簡單的獲取了新聞的列表和詳情數(shù)據(jù)昵仅,由于api和鳳凰新聞客戶端完全一致缓熟,鑒于侵權(quán)問題我就不開源出來了。至于接口是如何獲取的摔笤?Google黎茎,百度守谓,調(diào)試獲取日志枚碗,我能說的只有這么多襟齿。
    功能:列表頁使用自定義的ListView(自動加載更多)顯示新聞列表,詳情使用的是WebView加載寞冯,支持滑動返回渴析。對于多圖 新聞的處理晚伙,使用的和主流新聞客戶端類似,滑動切換多張圖片俭茧,可雙指縮放圖片大信亓啤!

  • 圖片瀏覽
    介紹:API使用的是百度圖片的搜索接口母债,由于網(wǎng)上有很多的開發(fā)者開源了這個接口午磁,所以我也就放出來,如有侵權(quán)請及時告知毡们。
    功能:列表頁使用的瀑布流效果(增加了下拉刷新和上拉加載更多)詳情頁和列表頁的切換增加了一個圖片放大或縮小到指定位置的效果迅皇,圖片也可以雙指縮放!

  • 視頻爽看
    介紹:API使用的是優(yōu)酷開放平臺的SDK衙熔,不過要吐槽的一點是登颓,優(yōu)酷的SDK真心不好用,還是Eclipse版本的红氯,我是一點點移植到Android Studio平臺的框咙,但是它的接口還是很豐富的,好好的利用一下痢甘,還是能夠做出一個優(yōu)秀的APP的喇嘱。
    功能:列表頁使用了Google的CardView,簡單的獲取了一些視頻的基本數(shù)據(jù)塞栅。播放頁使用了優(yōu)酷提供的視頻播放器組件者铜,傳入視頻ID就可以播放視頻了,只要調(diào)通了SDK构蹬,其他的都是一些簡單的數(shù)據(jù)獲韧醢怠!

  • 音樂輕聽
    介紹:API獲取的是豆瓣音樂的數(shù)據(jù)庄敛,由于也不是開放API,如有侵權(quán)請及時告知科汗。
    功能:播放音樂的界面是我自定義的一個唱機的View藻烤,很多思路都是從網(wǎng)上學(xué)習(xí)借鑒過來的,自己重新造了個輪子头滔。UI和網(wǎng)易云音樂對比的話怖亭,只能說是形似神不似了,沒有人家做的細(xì)致坤检!

  • 二維碼掃描
    介紹:這個完全是我自己單獨開發(fā)的類庫兴猩,之前也有開源出來,這次又再一次重構(gòu)優(yōu)化早歇,后期會單獨剝離二維碼掃描模塊倾芝,做成類庫和Demo的形式讨勤,提供Android Studio版本。
    功能:掃描界面使用xml進行布局晨另,然后加入屬性動畫潭千。這樣布局更具有優(yōu)勢,更利于多屏幕適配借尿。解碼模塊使用的是兩個主流的開源庫Zbar和ZXing刨晴,進過多次測試發(fā)現(xiàn),ZBar雖然掃描效率和速度高于ZXing路翻,但是經(jīng)常掃描出錯誤的信息狈癞,可能由于太靈敏的緣故把,綜合二者的優(yōu)缺點還是建議使用ZXing來解碼茂契,并且這個項目還在長期維護更新蝶桶!
    項目介紹及其源碼下載地址: http://www.jcodecraeer.com/a/opensource/2015/0818/3324.html

SimplifyReader
7. StickerCamera

這是一款集成了相機,圖片裁剪,給圖片貼貼圖打標(biāo)簽的APP。編譯需要java8账嚎。
使用說明:
實現(xiàn)相機功能
實現(xiàn)對圖片進行裁剪的功能
圖片的濾鏡功能
能為圖片添加貼紙(貼紙可移動,放大,旋轉(zhuǎn))
能為圖片添加標(biāo)簽(同樣可以移動)
本地保存制作好的圖片,并展示
較多的自定義控件,不錯的項目架構(gòu)
項目介紹及其源碼下載地址:
http://www.jcodecraeer.com/a/opensource/2015/0729/3232.html

StickerCamera

8. SmsCodeHelper

是由原「貝殼單詞」團隊開發(fā)的一款新的開源輕App. 它可以在手機接收到驗證碼短信的時候莫瞬,自動浮現(xiàn)驗證碼,并自動復(fù)制驗證碼到用戶的剪切板郭蕉。當(dāng)用戶接收到短信驗證碼疼邀,只要長按驗證碼的輸入框,粘貼驗證碼即可召锈。
項目介紹及其源碼下載地址:http://www.jcodecraeer.com/a/opensource/2015/0624/3102.html

SmsCodeHelper
9. Notes

一款基于Material Design 的開源筆記本應(yīng)用,Material Design風(fēng)格旁振,采用抽屜式菜單,懸浮滑動按鈕涨岁,點擊控件時的水波紋效果拐袜,狀態(tài)欄透明使得與應(yīng)用融為一體,用戶即使在Android L系統(tǒng)以下的手機也能感受到良好的用戶體驗 用文字記錄身邊隨時發(fā)生的事情梢薪,或者你的待辦事項 同步蹬铺,同步需要你在手機設(shè)置里面添加一個郵箱,并作為你的同步賬號秉撇,提交到服務(wù)器甜攀。
項目介紹及其源碼下載地址:http://www.jcodecraeer.com/a/opensource/2015/0613/3037.html

Notes
10. Hubble Gallery

一個顯示哈勃拍攝的太空照片的相冊類 app,該項目使用了ObservableScrollView琐馆,road-trip 等著名的庫规阀,很適合學(xué)習(xí)。
項目介紹及其源碼下載地址:http://www.codeforge.cn/article/259687

Hubble Gallery
11. BiliClient

仿bilibili客戶端瘦麸,喜歡動漫的進谁撼。
項目介紹及其源碼下載地址::http://www.jcodecraeer.com/a/opensource/2015/0527/2936.html

BiliClient
12. V2EX社區(qū)客戶端

支持功能:

話題查看
節(jié)點查看和按字母搜索
用戶資料查看
話題回復(fù)
話題創(chuàng)建
未讀提醒查看

其他功能:

實現(xiàn)了節(jié)點、話題滋饲、用戶三個Scheme,通過話題厉碟、節(jié)點喊巍、用戶鏈接直接打開客戶端進行相關(guān)信息瀏覽
對用戶已經(jīng)瀏覽過的話題作記憶處理并在界面上進行展示
話題、帖子等采用了卡片式布局

編譯需求:

JDK 1.7+
Android Studio 1.0+
Android SDK r21+

項目介紹及其源碼下載地址:http://www.jcodecraeer.com/a/opensource/2015/0523/2917.html

V2EX社區(qū)客戶端
13. Remindly

是一個簡單的用戶友好的提醒應(yīng)用墨榄。特點:Material 風(fēng)格玄糟,可以設(shè)置重復(fù)提醒,按小時袄秩,按天 按周阵翎,按月。
項目介紹及其源碼下載地址:http://www.jcodecraeer.com/a/opensource/2015/0504/2832.html

Remindly.png
14. Launcher3

很老的項目了之剧,更改官方的Launcher3使得可以在eclipse編譯 targetSdkVersion 必須是19 (之前說的有錯誤) 如果修改AndroidManifest.xml后有錯誤郭卫,project -> clean 作者配有相關(guān)的分析文章 。
項目介紹及其源碼下載地址: http://www.jcodecraeer.com/a/opensource/2015/0412/2710.html

Launcher3
15. superCleanMaster

一鍵清理開源版背稼,包括內(nèi)存加速贰军,緩存清理,自啟管理蟹肘,軟件管理等词疼。
項目介紹及其源碼下載地址: http://www.jcodecraeer.com/a/opensource/2015/0315/2604.html

superCleanMaster
16. BlackLight

是由紙飛機開發(fā)團隊開發(fā)的一款A(yù)ndroid上的新浪微博第三方輕量級客戶端。沒有任何商業(yè)化的因素帘腹,沒有廣告(新浪友情插入的除外)贰盗,是一個最純凈的新浪微博客戶端。
項目介紹及其源碼下載地址:http://www.jcodecraeer.com/a/opensource/2015/0309/2572.html

BlackLight
17. Sky31Radio

一個開源的校園電臺app阳欲,一款學(xué)院風(fēng)的電臺節(jié)目舵盈。可以學(xué)習(xí)球化,不過因為是校園的東西秽晚,服務(wù)端說不定哪天說沒就沒了。
項目介紹及其源碼下載地址: http://www.jcodecraeer.com/a/opensource/2015/0303/2525.html

Sky31Radio
18. Material-Movies

material design風(fēng)格的電影應(yīng)用筒愚,這個應(yīng)用的目的其實是為了講解作者一篇文章中所描述的一種編程模式赴蝇。
項目介紹及其源碼下載地址: http://www.jcodecraeer.com/a/opensource/2015/0209/2447.html

Material-Movies
19. WayHoo

威震天氣
本應(yīng)用是以變形金剛作為主題元素的實用型Android天氣軟件,界面高仿雅虎天氣巢掺,數(shù)據(jù)來自中國天氣網(wǎng)扯再!
下載apk
騰訊應(yīng)用市場
百度應(yīng)用市場
威震天氣 Android 客戶端項目簡析
注:本文假設(shè)你已經(jīng)有Android開發(fā)環(huán)境
①.啟動Eclipse,將名為WayHoo導(dǎo)入作為主工程址遇,并確保你當(dāng)前的Android SDK是最新版。②.將libs目錄下相應(yīng)的庫導(dǎo)入Eclipse斋竞,并作為主工程的庫工程倔约,以免缺少一些必要的資源或類。③.如果編譯出錯坝初,請修改項目根目錄下的 project.properties 文件浸剩。④.請使用Android 4.0 以上版本的SDK钾军,JDK1.6編譯:
target=android-19
項目介紹及其源碼下載地址: http://git.oschina.net/way/WayHoo

WayHoo
20. OpenLibra-Material

OpenLibra 的一個客戶端(非官方),演示了 Material 設(shè)計在真實應(yīng)用
中的使用绢要,OpenLibra 是西班牙的一個提供免費書籍下載的網(wǎng)站吏恭。建議 用 studio 編譯
項目介紹及其源碼下載地址:
http://www.apkbus.com/forum.php?mod=viewthread&tid=255336&sortid=12

OpenLibra-Material
21. InstaMaterial

將概念設(shè)計在程序中實現(xiàn)的人是偉大的,作者將 Instagram 的一組
Material 風(fēng)格的概念設(shè)計轉(zhuǎn)變成了現(xiàn)實重罪,非常有借鑒意義樱哼。包括水波效 果 ListView 的生動初始化效果,actionbar 元素的進入效果剿配,popmenu 的動畫效果等搅幅。5 星級代碼當(dāng)之無愧。
項目介紹及其源碼下載地址: https://github.com/frogermcs/InstaMaterial

InstaMaterial
22. Compass

本項目是 MIUI 指南針的社區(qū)開源版呼胚,由 MIUI 團隊(www.miui.com) 發(fā)起并貢獻(xiàn)第一批代碼
項目介紹及其源碼下載地址: http://www.jcodecraeer.com/a/opensource/2015/0122/2339.html

Compass
23. Omni-Notes

功能相當(dāng)完善的記事本 app茄唐。包括記事分類,涂鴉蝇更、添加圖片或者其他
附件沪编,日程提醒等記事本常用功能,可以在此基礎(chǔ)上做二次開發(fā)年扩,但需 要遵守 gpl 協(xié)議蚁廓。依賴了好幾個庫,又是 studio 開發(fā)的常遂,新手編譯起來 可能比較吃力纳令。
項目介紹及其源碼下載地址: http://www.jcodecraeer.com/a/opensource/2015/0102/2243.html

Omni-Notes
24. Smart-Note

一個很簡單的記事本應(yīng)用,只有添加和查看功能克胳。適合初學(xué)者學(xué)習(xí)數(shù)據(jù) 庫的基本操作
項目介紹及其源碼下載地址: http://www.jcodecraeer.com/a/opensource/2015/0102/2242.html

Smart-Note
25. AnimeTaste(全球動畫精選)

AnimeTaste(品賞艾尼莫)是國內(nèi)首個關(guān)注獨立動畫的網(wǎng)站平绩。 移動版 聚焦更新的全球獨立動畫的傳播,讓您隨時隨地能觀看動畫漠另,分享快樂 給更多好友捏雌。品味動畫,重拾幻想笆搓。 AnimeTaste For Android性湿,為全 球動畫愛好者所開發(fā)。
項目介紹及其源碼下載地址:http://www.jcodecraeer.com/a/opensource/2014/1121/2031.html

AnimeTaste(全球動畫精選)
26. Faceless 匿名聊天應(yīng)用匿名聊天應(yīng)用满败,包括了 android 客戶端以及服務(wù)端(php)的代碼

項目介紹及其源碼下載地址:http://www.jcodecraeer.com/a/opensource/2014/1114/1981.html

Faceless
27. photoup 開源相冊

photoup 是一款開源的相冊類 app肤频,主要功能是將本地圖片提交到 facebook 上去,雖然他的功能和 facebook 的遠(yuǎn)程服務(wù)相關(guān)算墨,但是本身 是可以被當(dāng)作一款相冊應(yīng)用的宵荒,具有相冊應(yīng)用需要的絕大多數(shù)功能,可 以很流暢的瀏覽相冊,裁剪圖片报咳,縮放圖片侠讯,圖片的編輯;不僅如此,還帶有人臉識別這種特色功能暑刃,如果我們能夠吸收其中的知識厢漩,寫一個 自己的相冊應(yīng)用就得心應(yīng)手了,因為從本地相冊的角度去看岩臣,photoup 在用戶體驗上仍然是值得改進的溜嗜,仍然值得我們?nèi)ラ_發(fā)一款相冊程序。
項目介紹及其源碼下載地址:http://www.jcodecraeer.com/a/opensource/2014/1111/1956.html

photoup 開源相冊
28. ZhihuPaper

一個「知乎日報」Android 客戶端 婿脸。經(jīng)過了一段時間的開發(fā)粱胜,最初的
設(shè)想已經(jīng)全部完成: 最新新聞、過往的新聞的展示 下拉刷新數(shù)據(jù) 新 聞?wù)牡恼故?WebView 的各種使用) 正文中圖片查看狐树、保存至相冊 離線下載 夜間模式 收藏夾 已讀數(shù)據(jù)緩存 內(nèi)容分享至 SNS
項目介紹及其源碼下載地址:http://www.jcodecraeer.com/a/opensource/2014/1106/1919.html

ZhihuPaper
29. TTAndroidClient 開源 IM

一個適用于公司內(nèi)部同事交流的開源 im焙压,該源碼是由 Teamtalk 團隊貢 獻(xiàn),同時他們開源了其他配套的源碼抑钟。 因為該項目涉及到侵權(quán)已經(jīng)被 git 下架涯曲。
項目介紹及其源碼下載地址:http://www.jcodecraeer.com/a/opensource/2014/1104/1904.html

TTAndroidClient 開源 IM
30. v2ex-daily:v2ex 網(wǎng)站的 android 客戶端

v2ex 是一個創(chuàng)意工作者交流的社區(qū),里面也有很多的程序員在塔,v2ex-daily 是為 v2ex 開發(fā)的 android 客戶端幻件。可以在 google play 上下載蛔溃。
項目介紹及其源碼下載地址:http://www.jcodecraeer.com/a/opensource/2014/1029/1868.html

v2ex-daily-v2ex 網(wǎng)站的 android 客戶端
31. Muzei Live Wallpaper for Android Muzei 壁紙應(yīng)用

這是已經(jīng)在 Playstore 上線了的 android 壁紙應(yīng)用绰沥,點擊壁紙界面可以 磨砂透明效果以及一般背景效果之間切換,可以自己指定背景圖片的來 源贺待。最重要的他是開源的徽曲。 有一點需要注意,這個項目使用了 EventBus 庫麸塞。在 Eclipse 下整個項目要編譯起來還是有點困難的秃臣。不妨試試Studio。
項目介紹及其源碼下載地址:http://www.jcodecraeer.com/a/opensource/2014/1024/1834.html

Muzei Live Wallpaper for Android Muzei 壁紙應(yīng)用
32. MiCode/FileExplorer

小米文件管理器開源版 小米文件管理器的開源版哪工,這是一個完整的文件管理程序奥此,雖然界面一 般,但是功能相對完善雁比,非常適合用來學(xué)習(xí)稚虎。
項目介紹及其源碼下載地址:http://www.jcodecraeer.com/a/opensource/2014/1023/1830.html

MiCode:FileExplorer
33. QuickNews 新聞客戶端

一個不錯的新聞客戶端,下載下來能用偎捎,是結(jié)合了很多開源項目制作的祥绞, 值得新手參考下非洲,數(shù)據(jù)也是通過網(wǎng)易和騰訊提供的。 并提供一個 APK 下載地址 大家可以下載下來看看蜕径,個人覺得還是很不錯的,很多效果 可以運用到自己的項目中去败京。
項目介紹及其源碼下載地址:http://www.jcodecraeer.com/a/opensource/2014/1022/1822.html

QuickNews 新聞客戶端
34. SeeWeather就看天氣

是一款遵循 Material Design 風(fēng)格的只看天氣的 APP兜喻。無流氓權(quán)限,無自啟赡麦,xxx朴皆,用最少的權(quán)限做最優(yōu)的體驗。
項目介紹及其源碼下載地址: http://www.jcodecraeer.com/a/opensource/2016/0221/3985.html

SeeWeather
35. Memo

一款基于 Google Material Design 設(shè)計開發(fā)的 Android 密碼管理客戶端
--怕死我的(PassWord)
項目介紹及其源碼下載地址:http://www.jcodecraeer.com/a/opensource/2016/0203/3940.html

Memo
36. React-Native-Gank

為 Gank.io 做的一個 React-Native 客戶端
Update 1st
添加主要邏輯
頁面數(shù)據(jù)API拼接 (拼接到1/15號泛粹,具體邏輯還沒寫)
單頁面數(shù)據(jù)的獲取
圖形加載
添加主要邏輯
面向?qū)ο缶幊痰拇a重構(gòu)
完成首頁遂铡、歷史頁
完成內(nèi)容詳情頁Header的半透明控制
添加了Navigationbar的自定義組件
項目介紹及其源碼下載地址:http://www.jcodecraeer.com/a/opensource/2016/0126/3914.html

React-Native-Gank
37. EasyGank

基于 MVP 模式 , RxJava+RxAndroid+Retrofit 組合的干貨集中營客戶端。
項目介紹及其源碼下載地址:http://www.jcodecraeer.com/a/opensource/2016/0119/3885.html

EasyGank
38. CoCoin

CoCoin是一款記賬APP晶姊,有記賬扒接、多種方式顯示支出占比和支出變化、云同步们衙、智能提醒等功能钾怔。
項目介紹及其源碼下載地址:http://www.jcodecraeer.com/a/opensource/2016/0114/3865.html

CoCoin
39. SimpleNews

基于 Material Design 和 MVP 的新聞客戶端。
項目介紹及其源碼下載地址:http://www.jcodecraeer.com/a/opensource/2015/1227/3809.html

SimpleNews
40. JNote

一款支持部分 Markdown 語法的輕量級便簽軟件蒙挑。
項目介紹及其源碼下載地址:http://www.jcodecraeer.com/a/opensource/2015/1217/3780.html

JNote
41. DoubanMovie-React-Native

React Native 的豆瓣電影客戶端宗侦。
項目介紹及其源碼下載地址:http://www.jcodecraeer.com/a/opensource/2015/1111/3676.html

DoubanMovie-React-Native
42. RxWeather

這是一個簡單的天氣預(yù)報項目,目的是用來演示如何使用 RxJava 構(gòu)造
一個清晰的 Android 應(yīng)用框架忆蚀,并且加入了 Rxbus矾利。
項目介紹及其源碼下載地址:http://www.jcodecraeer.com/a/opensource/2015/1111/3673.html

RxWeather
43. Hide-Music-Player

Hide 音樂播放器。 1.0 版主要特點 搖一搖進入播放器, 下拉展開新視
圖(掃描音樂), 音樂列表放大的動畫, 進入頁面的圓形動畫, 滑動刪 除音樂, 更換主題顏色, 自定義的 SwitchButton, 播放頁面的模糊背景, 帶指示器的自定義 SeekBar, 通知欄顯示音樂信息與關(guān)閉播放器
項目介紹及其源碼下載地址:http://www.jcodecraeer.com/a/opensource/2015/1026/3626.html

Hide-Music-Player
44. GankIO

為學(xué)習(xí)使用 MVP馋袜、RxJava男旗、Retrofit 等知識點,作者仿照 @drakeet 的妹紙桃焕, 使用 MVP 模式對項目進行重構(gòu)剑肯,讓視圖層跟業(yè)務(wù)邏輯向分離,使代碼結(jié)構(gòu)更清晰观堂。
項目介紹及其源碼下載地址:http://www.jcodecraeer.com/a/opensource/2015/1117/3694.html

GankIO
45. GithubTrends

這是一個用來看查看 Github 熱門項目的 Android App, 遵循 Material
Design让网。 (https://github.com/trending) 支持訂閱 50 多種編程語言, 你可以在設(shè)置中添加/刪除它們师痕,并自定義它們的排序溃睹。 支持 9 種顏 色主題切換,支持收藏喜歡的項目胰坟。
項目介紹及其源碼下載地址:http://www.jcodecraeer.com/a/opensource/2015/1015/3583.html

GithubTrends
46. githot

GitHot 是一款幫助你尋找 github 上最流行開源項目的 app因篇。 功能比較
簡單,就是列舉了熱門的項目和作者。不過里面用到了很多新技術(shù) RxJava竞滓,Dagger咐吼,retrofit 等,作為學(xué)習(xí)材料還是不錯的商佑。
項目介紹及其源碼下載地址:http://www.jcodecraeer.com/a/opensource/2015/1011/3571.html

githot
47. Timber

Material Design 風(fēng)格的音樂播放器锯茄,beta 版本。
項目介紹及其源碼下載地址:http://www.jcodecraeer.com/a/opensource/2015/1004/3542.html

Timber
48. AnyShareOfAndroid

file transfer on android 仿茄子快傳 或者 360 文件傳輸 在局域網(wǎng)內(nèi)
(如果沒有接收方建立熱點茶没,發(fā)送方接入熱點)肌幽,進行文件(發(fā)送方的 app、圖片等文件抓半,項目中只是進行了手機中的第三方 app 和手機圖片 的)的傳輸喂急。
項目介紹及其源碼下載地址:http://www.apkbus.com/thread-256272-1-1.html

AnyShareOfAndroid
49. AppPlus

App+是一個 MD 風(fēng)格的用于傳送、提取 APK 文件的開源工具軟件笛求。
項目介紹及其源碼下載地址:http://www.jcodecraeer.com/a/opensource/2015/0928/3529.html

AppPlus
50. Conquer

基于 Material Design 的 todo 應(yīng)用廊移。 主要功能: 1.根據(jù)時間記錄任務(wù) 2.
定時提醒 3.云同步功能 亮點功能:1.可與好友分享,互相監(jiān)督 2.界面 簡潔精美涣易,用戶易操作 3.支持豐富內(nèi)容画机,形式多樣化。
項目介紹及其源碼下載地址:http://www.jcodecraeer.com/a/opensource/2015/0928/3527.html

Conquer
51. ZhiHuDaily-React-Native

使用 React Native for Android 完成的知乎日報 app新症。
項目介紹及其源碼下載地址:http://www.jcodecraeer.com/a/opensource/2015/0924/3509.html

ZhiHuDaily-React-Native
52. ToolWizAppLock (密碼鎖)

一個密碼鎖應(yīng)用步氏,加密你的應(yīng)用,照片徒爹,視頻文件荚醒。 在生活中,你有 沒有擔(dān)心過手機里的某些應(yīng)用被別人偷看隆嗅,比如微信聊天記錄界阁、短信、 照片? 你是否擔(dān)心一些重要圖片胖喳,視頻等重要資料被偷窺? 有了密碼 鎖泡躯,您只需將不想被別人查看的應(yīng)用在我這里鎖住,設(shè)置好密碼丽焊,就可 以高枕無憂了! 您只需將重要的圖片较剃,視頻等文件在我這里加密,再 也不怕被別人竊取你的隱私了!
項目介紹及其源碼下載地址:http://www.jcodecraeer.com/a/opensource/2015/0923/3507.html

ToolWizAppLock
53. archi

演示和比較如何用不同的架構(gòu)模式開發(fā)安卓 app技健。同樣的 app 使用傳統(tǒng) 的模式写穴,MVP 模式,MVVM 模式開發(fā)了三次雌贱。
項目介紹及其源碼下載地址:http://www.jcodecraeer.com/a/opensource/2015/0923/3504.html

archi
54. Clip-Stack(剪紙堆 )

剪紙堆 一個超輕量級剪貼板歷史記錄管理軟件啊送。
項目介紹及其源碼下載地址:http://www.apkbus.com/thread-256284-1-1.html

Clip-Stack(剪紙堆 )
55. pocket-note-android

一個簡單的記事本 app偿短,具有多色彩主題,自帶日歷視圖馋没,記事可以是
列表顯示也可以是網(wǎng)格顯示昔逗,提醒功能,隱私保護功能等披泪。
項目介紹及其源碼下載地址:http://www.jcodecraeer.com/a/opensource/2015/0918/3472.html

pocket-note-android
56. EWeightScale

一款可以記錄和查詢體重的應(yīng)用纤子,功能介紹如下 支持體重數(shù)據(jù)的添加、 刪除款票、查詢等功能 動態(tài)生成體重曲線圖,支持手勢縮放 實時計算 BMI 值泽论,并進行診斷艾少,給出健康體重范圍
項目介紹及其源碼下載地址:http://www.jcodecraeer.com/a/opensource/2015/0822/3347.html

EWeightScale

課表簡單查詢代碼

簡單的學(xué)習(xí)了有關(guān)的知識后,在學(xué)長的幫助下翼悴,我自己寫了一個非常簡單的課表查詢代碼缚够,這也是我在夏令營中所學(xué)知識的結(jié)晶。

MainActivity.java

package com.example.gridview;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;
import java.util.List;
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
   private List<String> data_list;
   private ArrayAdapter<String> arr_adapter;
   private Spinner spinner;
   private List<String> list;
   private ArrayAdapter<String> adapter;
   private static final String TAG ="MainActivity" ;
   //學(xué)期
   private Spinner mSpisemster;
  // private EditText mEtsemster;
   //班級
   private EditText mEtclassName;
   //查詢按鍵
   private Button mBtnLogin;
   private TextView mTvResult;
   @Override
   protected void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.activity_main);
       spinner = (Spinner) this.findViewById(R.id.spinner1);
       ArrayAdapter adapter = new ArrayAdapter(this,
               android.R.layout.simple_spinner_item, new String[] { " ","16-17-2", "16-17-1",
               "15_16-2","15_16-1","14_15-2","14_15-1","13_14-2"
               ,"13_14-1","12_13-2","12_13-1","11_12-2","11_12-1","10_11-2","10_11-1","09_10-2","09_10-1","08_09-2","08_09-1","07_08-2"
               ,"07_08-1","06_07-2","06_07-1","05_06-2","05_06-1","04_05-2","04_05-1","03_04-2","03_04-1","02_03-2","02_03-1","01_02-2"
               ,"01_02-1" });

       //設(shè)置下拉樣式
       adapter.setDropDownViewResource(android.R.layout.simple_dropdown_item_1line);
       spinner.setAdapter(adapter);
       initView();
       initListener();
   }
   /**
    * 初始化組件
    */
   private void initView() {
       mSpisemster = (Spinner) findViewById(R.id.spinner1);
      // mEtsemster = (EditText) findViewById(R.id.login_et_name);
       mEtclassName = (EditText) findViewById(R.id.login_et_pwd);
       mBtnLogin = (Button) findViewById(R.id.login_btn_login);
   }

   /**
    * 設(shè)置監(jiān)聽器
    */
   private void initListener() {
       mBtnLogin.setOnClickListener(this);
   }

   /*
   單擊事件監(jiān)聽
    */
   @Override
   public void onClick(View v) {
       if(v==mBtnLogin){
           //final String Semester = mEtsemster.getText().toString().trim();

           final String Semester = mSpisemster.getSelectedItem().toString().trim();
           final String ClassName = mEtclassName.getText().toString().trim();

           if(TextUtils.isEmpty(Semester) || TextUtils.isEmpty(ClassName)){

               Toast.makeText(MainActivity.this, "學(xué)期或班級不能為空", Toast.LENGTH_SHORT).show();
               return;
           }
           Intent intent = new Intent(this, com.example.gridview.ClassActivity.class);
           //向ClassActivity傳參數(shù)
           intent.putExtra("Semester", Semester);
           intent.putExtra("ClassName",ClassName);
           startActivity(intent);
       }
   }
}

BeanTable.java

package com.example.gridview;
import java.lang.reflect.Array;
import static android.R.attr.id;
/**
* Created by a302 on 2017/7/26.
*/
public class BeanTable {
   private String section;
   private String  one;
   private String  two;
   private String  three;
   private String  four;
   private String  five;
   private String  six;
   private String  seven;
   public String getSection() {
       return section;
   }
   public void setSection(String section) {
       this.section = section;
   }
   public String getOne() {
       return one;
   }
   public void setOne(String one) {
       this.one = one;
   }
   public String getTwo() {
       return two;
   }
   public void setTwo(String two) {
       this.two = two;
   }
   public String getThree() {
       return three;
   }
   public void setThree(String three) {
       this.three = three;
   }
   public String getFour() {
       return four;
   }
   public void setFour(String four) {
       this.four = four;
   }
   public String getFive() {
       return five;
   }
   public void setFive(String five) {
       this.five = five;
   }

   public String getSix() {
       return six;
   }
   public void setSix(String six) {
       this.six = six;
   }
   public String getSeven() {
       return seven;
   }
   public void setSeven(String seven) {
       this.seven = seven;
   }
}

ClassActivity.java


package com.example.gridview;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.widget.GridView;
import com.example.gridview.R;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import okhttp3.MediaType;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;
public class ClassActivity extends AppCompatActivity {
   private static final String TAG ="ClassActivity" ;
   private GridView gridView;
   private String Semester;
   private String ClassName;
   private final String url ="http://192.168.3.146:8080/Educational/GetJson";
   @Override
   protected void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.activity_class);
       //gridView = (GridView) findViewById(R.id.gridView1);
       gridView = (GridView) findViewById(R.id.gridView);
       Semester = getIntent().getStringExtra("Semester");
       ClassName = getIntent().getStringExtra("ClassName");
       login();
   }
   /*
  查詢
   */
   prinate void login() {
       new Thread(new Runnable() {
           @Override
           public void run() {
               OkHttpClient client = new OkHttpClient();
               Bean bean = new Bean();
               bean.setSemester(Semester);
               bean.setClassName(ClassName);
               Gson gson = new Gson();
               String strJson = gson.toJson(bean);
               //把請求的內(nèi)容字符串轉(zhuǎn)換為json
               MediaType JSON = MediaType.parse("application/json; charset=utf-8");
               RequestBody body = RequestBody.create(JSON, strJson);
               Request request = new Request.Builder()
                       .url(url)
                       .post(body)
                       .build();
               Response response = null;
               try {
                   response = client.newCall(request).execute();
                   String result = response.body().string();
                   List<BeanTable> tables = gson.fromJson(result, new
                           TypeToken<List<BeanTable>>()
                   {}.getType());
                   initGridView(tables);
                   Log.e(TAG, "結(jié)果:" + result);
               } catch (IOException e) {
                   e.printStackTrace();
                   Log.e(TAG, "錯誤:" + e.toString());
               }
               Log.e(TAG, "semester:" + Semester);
               Log.e(TAG, "classname:" + ClassName);
           }
       }).start();
   }
   private void initGridView(final List<BeanTable> tables) {
       runOnUiThread(new Runnable() {
           @Override
           public void run() {
               List<String> strList = new ArrayList<String>();

               for (BeanTable table : tables) {
                   strList.add(table.getSection());
                   strList.add(table.getOne());
                   strList.add(table.getTwo());
                   strList.add(table.getThree());
                   strList.add(table.getFour());
                   strList.add(table.getFive());
                   strList.add(table.getSix());
                   strList.add(table.getSeven());
               }
               GridViewAdapter adapter = new GridViewAdapter(ClassActivity.this, strList);
               gridView.setAdapter(adapter);
           }
       });
   }
}

GridViewAdapter.java

package com.example.gridview;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;
import com.example.gridview.R;
import java.util.ArrayList;
import java.util.List;
import static com.example.gridview.R.id.textView;
/**
 * Created by a302 on 2017/7/26.
 */
public class GridViewAdapter extends BaseAdapter {
    private Context mContext;
    private List<String> stringList = new ArrayList<>();
    public GridViewAdapter(Context mContext, List<String> stringList) {
        this.mContext = mContext;
        this.stringList = stringList;
    }
    @Override
    public int getCount() {
        return stringList.size();
    }
    @Override
    public Object getItem(int position) {
        return stringList.get(position);
    }
    @Override
    public long getItemId(int position) {
        return position;
    }
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHodle hodle = null;
        if (convertView == null) {
            convertView = LayoutInflater.from(mContext).inflate(R.layout.item_gridview, null);
            hodle = new ViewHodle();
            hodle.textView = (TextView) convertView.findViewById(textView);
            convertView.setTag(hodle);
        } else {
            hodle = (ViewHodle) convertView.getTag();
        }
        hodle.textView.setText(stringList.get(position));
        return convertView;
    }
    class ViewHodle{
        private TextView textView;
    }
}

HttpUtils.java

package com.example.gridview;
import android.util.Log;
import java.io.IOException;
        import android.util.Log;
        import com.google.gson.Gson;
        import java.io.IOException;
        import okhttp3.MediaType;
        import okhttp3.OkHttpClient;
        import okhttp3.Request;
        import okhttp3.RequestBody;
        import okhttp3.Response;
        import okhttp3.ResponseBody;
        import static android.R.attr.password;
/**
 * Created by Administrator on 2016-03-27.
 */
public class HttpUtils {
    OkHttpClient client = new OkHttpClient();
    public static final MediaType JSON
            = MediaType.parse("application/json; charset=utf-8");
    public String login(String url, String json) throws IOException {
        //把請求的內(nèi)容字符串轉(zhuǎn)換 為json
        RequestBody body = RequestBody.create(JSON, json);
        //RequestBody formBody = new FormEncodingBuilder()
        Request request = new Request.Builder()
                .url(url)
                .post(body)
                .build();
        Response response = client.newCall(request).execute();
        String result = response.body().string();
        return result;
    }
    public String bolwingJson(Bean bean) {
        Gson gson = new Gson();
        String strJson = gson.toJson(bean);
        Log.e("strJson", strJson);
        return strJson;
    }
}

activity_class.xml

 <?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="#CFCFCF">
        <TextView
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="2"
            android:text=""
            android:textColor="#EE0000"/>

        <TextView
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="2"
            android:text="星期一"
            android:textColor="#EE0000"/>

        <TextView
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="2"
            android:text="星期二"
            android:textColor="#000000"/>

        <TextView
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="2"
            android:text="星期三"
            android:textColor="#EE0000"/>

        <TextView
            android:id="@+id/textView2"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="2"
            android:text="星期四"
            android:textColor="#000000"/>

        <TextView
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="2"
            android:text="星期五"
            android:textColor="#EE0000"/>

        <TextView
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="2"
            android:text="星期六"
            android:textColor="#000000"/>

        <TextView
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="2"
            android:text="星期日"
            android:textColor="#EE0000"/>
    </LinearLayout>
            <GridView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:background="@drawable/bg_border"
                android:numColumns="8"
                android:verticalSpacing="80dp"/>
</LinearLayout>

activity_mian.xml

 <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:orientation="vertical"
              android:layout_width="match_parent"
              android:layout_height="match_parent">

    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="10sp"
        android:textColor="#000000"

        />
</LinearLayout>

item_gridview.xml

 <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:orientation="vertical"
              android:layout_width="match_parent"
              android:layout_height="match_parent">

    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="10sp"
        android:textColor="#000000"

        />
</LinearLayout>

Bean.java

 package com.example.gridview;

/**
 * Created by a302 on 2017/7/26.
 */

public class Bean {
    private String Semester;
    private String ClassName;

    public String getSemester() {
        return Semester;
    }

    public void setSemester(String semester) {
        Semester = semester;
    }

    public String getClassName() {
        return ClassName;
    }

    public void setClassName(String className) {
        ClassName = className;
    }
}

總結(jié)

  • 實驗室的這段時間鹦赎,我接觸到也學(xué)到了很多的東西谍椅,這是我意想不到的,覺得自己對編程的理解比不進實驗室的同學(xué)高了一點古话,也喜歡上了編程雏吭,喜歡用代碼自己去創(chuàng)造一個獨立的空間,喜歡找bug的感覺陪踩,一個bug找不出來連飯都吃得不香彼妻,有時候因為找一個bug默怨,經(jīng)常一個上午沒有起過座位,雖然會很累但是我很享受這種感覺,進實驗室以后對我整個人都有了很大的改變柒啤,特別是眼界有了很大的提升,都說大學(xué)生活的懶散的书劝,最好要有一件事或一個人壓著你损痰,這樣或許才會有所改變,而實驗室的任務(wù)和老師正是這樣一個存在审磁,所以我才會有那么一點的進步谈飒。
  • 是在這個夏令營中老師還讓我們每個人把自己所學(xué)的知識,以技術(shù)分享的形式向?qū)嶒炇业母鱾€同學(xué)們分享力图,這是我第一次向大家講解那么專業(yè)性的知識步绸,既緊張又害怕,害怕自己講得不好吃媒,然而越害怕什么就來什么瓤介,首先是緊張得代碼都忘記了吕喘,然后是自己的南普讓大家聽得很不舒服,英語口語方面也是差強人意刑桑,以后我會多多鍛煉自己口語的方面氯质。在這個期間我也學(xué)到了團結(jié)的重要性 ,在APP開發(fā)的時候真的是缺一環(huán)都不得祠斧,后臺沒做好的話前端就測試不了闻察,前端沒做好的話也不能測試出后臺的是否做好。所以這非常需要我們之間的交流和團結(jié)琢锋,只有多交流才能做出一個好的項目來辕漂。我也非常感謝老師和師兄師姐們的幫助,沒有他們的幫助我或許都不能做出想要的結(jié)果吴超《む冢總而言之,言而總之鲸阻,我在 實驗室這段時間雖然過得累跋涣,但是我有收獲,也非常的開心鸟悴。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末陈辱,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子细诸,更是在濱河造成了極大的恐慌沛贪,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,496評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件揍堰,死亡現(xiàn)場離奇詭異鹏浅,居然都是意外死亡,警方通過查閱死者的電腦和手機屏歹,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,187評論 3 385
  • 文/潘曉璐 我一進店門隐砸,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人蝙眶,你說我怎么就攤上這事季希。” “怎么了幽纷?”我有些...
    開封第一講書人閱讀 157,091評論 0 348
  • 文/不壞的土叔 我叫張陵式塌,是天一觀的道長。 經(jīng)常有香客問我友浸,道長峰尝,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,458評論 1 283
  • 正文 為了忘掉前任收恢,我火速辦了婚禮武学,結(jié)果婚禮上祭往,老公的妹妹穿的比我還像新娘。我一直安慰自己火窒,他們只是感情好硼补,可當(dāng)我...
    茶點故事閱讀 65,542評論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著熏矿,像睡著了一般已骇。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上票编,一...
    開封第一講書人閱讀 49,802評論 1 290
  • 那天褪储,我揣著相機與錄音,去河邊找鬼慧域。 笑死乱豆,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的吊趾。 我是一名探鬼主播,決...
    沈念sama閱讀 38,945評論 3 407
  • 文/蒼蘭香墨 我猛地睜開眼瑟啃,長吁一口氣:“原來是場噩夢啊……” “哼论泛!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起蛹屿,我...
    開封第一講書人閱讀 37,709評論 0 266
  • 序言:老撾萬榮一對情侶失蹤屁奏,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后错负,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體坟瓢,經(jīng)...
    沈念sama閱讀 44,158評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,502評論 2 327
  • 正文 我和宋清朗相戀三年犹撒,在試婚紗的時候發(fā)現(xiàn)自己被綠了折联。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,637評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡识颊,死狀恐怖诚镰,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情祥款,我是刑警寧澤清笨,帶...
    沈念sama閱讀 34,300評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站刃跛,受9級特大地震影響抠艾,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜桨昙,卻給世界環(huán)境...
    茶點故事閱讀 39,911評論 3 313
  • 文/蒙蒙 一检号、第九天 我趴在偏房一處隱蔽的房頂上張望腌歉。 院中可真熱鬧,春花似錦谨敛、人聲如沸究履。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,744評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽最仑。三九已至,卻和暖如春炊甲,著一層夾襖步出監(jiān)牢的瞬間泥彤,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,982評論 1 266
  • 我被黑心中介騙來泰國打工卿啡, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留吟吝,地道東北人。 一個月前我還...
    沈念sama閱讀 46,344評論 2 360
  • 正文 我出身青樓颈娜,卻偏偏與公主長得像剑逃,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子官辽,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,500評論 2 348

推薦閱讀更多精彩內(nèi)容