├── .gitattributes ├── .gitignore ├── .idea ├── .name ├── compiler.xml ├── copyright │ └── profiles_settings.xml ├── gradle.xml ├── misc.xml ├── modules.xml ├── runConfigurations.xml └── vcs.xml ├── AndroidDesignLibrary.iml ├── README.md ├── app ├── .gitignore ├── app.iml ├── build.gradle ├── proguard-rules.pro └── src │ ├── androidTest │ └── java │ │ └── com │ │ └── xjp │ │ └── androidtoolbardemo │ │ └── ApplicationTest.java │ └── main │ ├── AndroidManifest.xml │ ├── java │ └── com │ │ └── xjp │ │ └── androidtoolbardemo │ │ ├── activity │ │ ├── BaseActivity.java │ │ ├── BlogActivity.java │ │ ├── MainActivity.java │ │ ├── TabFragment.java │ │ └── TwoActivity.java │ │ ├── adapter │ │ ├── RecyclerAdapter.java │ │ └── TabFragmentAdapter.java │ │ └── model │ │ └── ModelBean.java │ └── res │ ├── drawable-hdpi │ └── ic_launcher.png │ ├── drawable-mdpi │ └── ic_launcher.png │ ├── drawable-xhdpi │ ├── header.png │ ├── ic_account_balance_black_24dp.png │ ├── ic_backspace_black_24dp.png │ ├── ic_discuss.png │ ├── ic_error_outline_black_36dp.png │ ├── ic_launcher.png │ ├── ic_list_black_24dp.png │ ├── ic_list_black_48dp.png │ ├── ic_power_settings_new_black_36dp.png │ ├── ic_settings_applications_black_36dp.png │ ├── image.jpg │ ├── img1.jpg │ ├── img2.jpg │ ├── img3.jpg │ ├── img4.jpg │ ├── img5.jpg │ ├── img6.jpg │ ├── img7.jpg │ └── img8.jpg │ ├── drawable-xxhdpi │ ├── bg1.jpg │ ├── bg2.jpg │ ├── bg3.jpg │ ├── bg4.jpg │ └── ic_launcher.png │ ├── layout │ ├── activity_blog.xml │ ├── activity_main.xml │ ├── activity_two.xml │ ├── item.xml │ ├── item_card_view.xml │ ├── layout_content.xml │ ├── layout_header.xml │ ├── layout_menu.xml │ └── toolbar.xml │ ├── menu │ └── menu_main.xml │ ├── values-v21 │ └── dimens.xml │ ├── values-w820dp │ └── dimens.xml │ └── values │ ├── colors.xml │ ├── dimens.xml │ ├── strings.xml │ └── styles.xml ├── build.gradle ├── gradle.properties ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat └── settings.gradle /.gitattributes: -------------------------------------------------------------------------------- 1 | # Auto detect text files and perform LF normalization 2 | * text=auto 3 | 4 | # Custom for Visual Studio 5 | *.cs diff=csharp 6 | 7 | # Standard to msysgit 8 | *.doc diff=astextplain 9 | *.DOC diff=astextplain 10 | *.docx diff=astextplain 11 | *.DOCX diff=astextplain 12 | *.dot diff=astextplain 13 | *.DOT diff=astextplain 14 | *.pdf diff=astextplain 15 | *.PDF diff=astextplain 16 | *.rtf diff=astextplain 17 | *.RTF diff=astextplain 18 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .gradle 2 | /local.properties 3 | /.idea/workspace.xml 4 | /.idea/libraries 5 | .DS_Store 6 | /build 7 | -------------------------------------------------------------------------------- /.idea/.name: -------------------------------------------------------------------------------- 1 | AndroidDesignLibrary -------------------------------------------------------------------------------- /.idea/compiler.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 22 | -------------------------------------------------------------------------------- /.idea/copyright/profiles_settings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /.idea/gradle.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 17 | 18 | -------------------------------------------------------------------------------- /.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 16 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 43 | 44 | 45 | 46 | 47 | 1.8 48 | 49 | 54 | 55 | 56 | 57 | 58 | 59 | -------------------------------------------------------------------------------- /.idea/modules.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /.idea/runConfigurations.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 11 | 12 | -------------------------------------------------------------------------------- /.idea/vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /AndroidDesignLibrary.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # AndroidDesignLibrary 2 | Support Design Library demo 3 | 4 | 5 | ![这里写图片描述](http://img.blog.csdn.net/20150615164724009) 6 | 7 | #修改兼容性问题的bug 8 | - 修改Android5.x以上FloatingActionButton没有浮动和阴影效果 9 | - 修改CardView在5.x以上没有阴影效果 10 | - 修改AppBarLayout实现上滑隐藏ToolBar效果时在Android5.x以上挤压ToolBar效果 11 | -------------------------------------------------------------------------------- /app/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /app/app.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 8 | 9 | 10 | 11 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | -------------------------------------------------------------------------------- /app/build.gradle: -------------------------------------------------------------------------------- 1 | apply plugin: 'com.android.application' 2 | 3 | android { 4 | compileSdkVersion 22 5 | buildToolsVersion "22.0.1" 6 | 7 | defaultConfig { 8 | applicationId "com.xjp.androidtoolbardemo" 9 | minSdkVersion 11 10 | targetSdkVersion 22 11 | versionCode 1 12 | versionName "1.0" 13 | } 14 | buildTypes { 15 | release { 16 | minifyEnabled false 17 | proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 18 | } 19 | } 20 | } 21 | 22 | dependencies { 23 | compile fileTree(include: ['*.jar'], dir: 'libs') 24 | compile 'com.android.support:appcompat-v7:22.2.0' 25 | compile 'com.android.support:design:22.2.0' 26 | compile 'com.android.support:recyclerview-v7:22.2.0' 27 | compile 'com.android.support:cardview-v7:22.2.0' 28 | compile 'com.android.support:palette-v7:22.2.0' 29 | compile 'de.hdodenhof:circleimageview:1.3.0' 30 | } 31 | -------------------------------------------------------------------------------- /app/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # By default, the flags in this file are appended to flags specified 3 | # in D:\Android SDK\sdk/tools/proguard/proguard-android.txt 4 | # You can edit the include path and order by changing the proguardFiles 5 | # directive in build.gradle. 6 | # 7 | # For more details, see 8 | # http://developer.android.com/guide/developing/tools/proguard.html 9 | 10 | # Add any project specific keep options here: 11 | 12 | # If your project uses WebView with JS, uncomment the following 13 | # and specify the fully qualified class name to the JavaScript interface 14 | # class: 15 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 16 | # public *; 17 | #} 18 | -------------------------------------------------------------------------------- /app/src/androidTest/java/com/xjp/androidtoolbardemo/ApplicationTest.java: -------------------------------------------------------------------------------- 1 | package com.xjp.androidtoolbardemo; 2 | 3 | import android.app.Application; 4 | import android.test.ApplicationTestCase; 5 | 6 | /** 7 | * Testing Fundamentals 8 | */ 9 | public class ApplicationTest extends ApplicationTestCase { 10 | public ApplicationTest() { 11 | super(Application.class); 12 | } 13 | } -------------------------------------------------------------------------------- /app/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 10 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /app/src/main/java/com/xjp/androidtoolbardemo/activity/BaseActivity.java: -------------------------------------------------------------------------------- 1 | package com.xjp.androidtoolbardemo.activity; 2 | 3 | import android.os.Bundle; 4 | import android.support.annotation.Nullable; 5 | import android.support.v7.app.AppCompatActivity; 6 | import android.view.View; 7 | 8 | /** 9 | * Description:Activity基础类 10 | * User: xjp 11 | * Date: 2015/6/17 12 | * Time: 16:54 13 | */ 14 | 15 | public abstract class BaseActivity extends AppCompatActivity { 16 | 17 | 18 | @Override 19 | protected void onCreate(@Nullable Bundle savedInstanceState) { 20 | super.onCreate(savedInstanceState); 21 | setContentView(getContentView()); 22 | initView(); 23 | } 24 | 25 | /** 26 | * 查找view 27 | */ 28 | protected T findView(int id) { 29 | return (T) findViewById(id); 30 | } 31 | 32 | /** 33 | * 加载布局 34 | * 35 | * @return 36 | */ 37 | protected abstract int getContentView(); 38 | 39 | /** 40 | * 初始化view 41 | */ 42 | protected abstract void initView(); 43 | 44 | } 45 | -------------------------------------------------------------------------------- /app/src/main/java/com/xjp/androidtoolbardemo/activity/BlogActivity.java: -------------------------------------------------------------------------------- 1 | package com.xjp.androidtoolbardemo.activity; 2 | 3 | import android.content.Intent; 4 | import android.net.Uri; 5 | import android.support.design.widget.Snackbar; 6 | import android.support.design.widget.TextInputLayout; 7 | import android.support.v7.widget.Toolbar; 8 | import android.text.Editable; 9 | import android.text.TextWatcher; 10 | import android.view.View; 11 | import android.widget.EditText; 12 | 13 | import com.xjp.androidtoolbardemo.R; 14 | 15 | /** 16 | * Description: 17 | * User: xjp 18 | * Date: 2015/6/17 19 | * Time: 18:47 20 | */ 21 | 22 | public class BlogActivity extends BaseActivity { 23 | 24 | private TextInputLayout inputLayout1; 25 | private TextInputLayout inputLayout2; 26 | private EditText member; 27 | private EditText password; 28 | private Toolbar toolbar; 29 | 30 | 31 | @Override 32 | protected int getContentView() { 33 | return R.layout.activity_blog; 34 | } 35 | 36 | @Override 37 | protected void initView() { 38 | 39 | toolbar = findView(R.id.toolbar); 40 | 41 | setSupportActionBar(toolbar); 42 | getSupportActionBar().setDisplayHomeAsUpEnabled(true); 43 | getSupportActionBar().setDisplayShowTitleEnabled(false); 44 | toolbar.setTitle("登录"); 45 | 46 | 47 | inputLayout1 = findView(R.id.textInputLayout1); 48 | member = inputLayout1.getEditText(); 49 | member.setText("CSDN废墟的树"); 50 | member.addTextChangedListener(new TextWatcher() { 51 | @Override 52 | public void beforeTextChanged(CharSequence s, int start, int count, int after) { 53 | } 54 | 55 | @Override 56 | public void onTextChanged(CharSequence s, int start, int before, int count) { 57 | if (s.length() > 8) { 58 | inputLayout1.setErrorEnabled(true); 59 | inputLayout1.setError("账户名不能超过8个字符"); 60 | } else { 61 | inputLayout1.setErrorEnabled(false); 62 | } 63 | } 64 | 65 | @Override 66 | public void afterTextChanged(Editable s) { 67 | } 68 | }); 69 | 70 | 71 | inputLayout2 = findView(R.id.textInputLayout2); 72 | password = inputLayout2.getEditText(); 73 | password.addTextChangedListener(new TextWatcher() { 74 | @Override 75 | public void beforeTextChanged(CharSequence s, int start, int count, int after) { 76 | } 77 | 78 | @Override 79 | public void onTextChanged(CharSequence s, int start, int before, int count) { 80 | if (s.length() > 6) { 81 | inputLayout2.setErrorEnabled(true); 82 | inputLayout2.setError("密码不能超过6个字符"); 83 | } else { 84 | inputLayout2.setErrorEnabled(false); 85 | } 86 | } 87 | 88 | @Override 89 | public void afterTextChanged(Editable s) { 90 | } 91 | }); 92 | } 93 | 94 | public void login(View view) { 95 | 96 | String mb = member.getText().toString().trim(); 97 | String ps = password.getText().toString().trim(); 98 | 99 | if (mb.length() > 0 && mb.length() < 9) { 100 | if (ps.length() == 6) { 101 | Uri u = Uri.parse("http://blog.csdn.net/feiduclear_up"); 102 | Intent it = new Intent(Intent.ACTION_VIEW, u); 103 | startActivity(it); 104 | } else { 105 | Snackbar.make(view, "请输入6位数的密码", Snackbar.LENGTH_SHORT).show(); 106 | } 107 | } else { 108 | Snackbar.make(view, "请输入正确的账号", Snackbar.LENGTH_SHORT).show(); 109 | } 110 | 111 | } 112 | } 113 | -------------------------------------------------------------------------------- /app/src/main/java/com/xjp/androidtoolbardemo/activity/MainActivity.java: -------------------------------------------------------------------------------- 1 | package com.xjp.androidtoolbardemo.activity; 2 | 3 | import android.content.Intent; 4 | import android.os.Bundle; 5 | import android.support.design.widget.FloatingActionButton; 6 | import android.support.design.widget.NavigationView; 7 | import android.support.design.widget.Snackbar; 8 | import android.support.design.widget.TabLayout; 9 | import android.support.v4.app.Fragment; 10 | import android.support.v4.view.GravityCompat; 11 | import android.support.v4.view.ViewPager; 12 | import android.support.v4.widget.DrawerLayout; 13 | import android.support.v7.widget.Toolbar; 14 | import android.view.Menu; 15 | import android.view.MenuItem; 16 | import android.view.View; 17 | import android.widget.Toast; 18 | 19 | import com.xjp.androidtoolbardemo.R; 20 | import com.xjp.androidtoolbardemo.adapter.TabFragmentAdapter; 21 | 22 | import java.util.ArrayList; 23 | import java.util.List; 24 | 25 | 26 | public class MainActivity extends BaseActivity implements Toolbar.OnMenuItemClickListener { 27 | 28 | private Toolbar toolbar; 29 | private FloatingActionButton fab; 30 | private TabLayout tabLayout; 31 | private ViewPager viewPager; 32 | 33 | private DrawerLayout drawerLayout; 34 | 35 | private NavigationView navigationView; 36 | 37 | 38 | @Override 39 | protected int getContentView() { 40 | return R.layout.activity_main; 41 | } 42 | 43 | @Override 44 | protected void initView() { 45 | // final TextInputLayout inputLayout = findView(R.id.textInput); 46 | // inputLayout.setHint("请输入姓名:"); 47 | // 48 | // EditText editText = inputLayout.getEditText(); 49 | // editText.setHintTextColor(getResources().getColor(android.R.color.holo_blue_bright)); 50 | // editText.addTextChangedListener(new TextWatcher() { 51 | // @Override 52 | // public void beforeTextChanged(CharSequence s, int start, int count, int after) { 53 | // } 54 | // 55 | // @Override 56 | // public void onTextChanged(CharSequence s, int start, int before, int count) { 57 | // if (s.length() > 4) { 58 | // inputLayout.setErrorEnabled(true); 59 | // inputLayout.setError("姓名长度不能超过4个"); 60 | // } else { 61 | // inputLayout.setErrorEnabled(false); 62 | // } 63 | // } 64 | // 65 | // @Override 66 | // public void afterTextChanged(Editable s) { 67 | // } 68 | // }); 69 | 70 | fab = findView(R.id.fab); 71 | fab.setOnClickListener(new View.OnClickListener() { 72 | @Override 73 | public void onClick(View v) { 74 | final Snackbar snackbar = Snackbar.make(v, "测试弹出提示", Snackbar.LENGTH_LONG); 75 | snackbar.setActionTextColor(getResources().getColor(android.R.color.holo_red_dark)); 76 | snackbar.show(); 77 | snackbar.setAction("取消", new View.OnClickListener() { 78 | @Override 79 | public void onClick(View v) { 80 | Toast.makeText(MainActivity.this, "SnackBar action", Toast.LENGTH_SHORT).show(); 81 | } 82 | }); 83 | } 84 | }); 85 | 86 | 87 | drawerLayout = findView(R.id.drawer_layout); 88 | navigationView = findView(R.id.navigationView); 89 | navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() { 90 | @Override 91 | public boolean onNavigationItemSelected(MenuItem menuItem) { 92 | switch (menuItem.getItemId()) { 93 | case R.id.sub_exit: 94 | finish(); 95 | break; 96 | case R.id.sub_switch: 97 | break; 98 | case R.id.nav_blog: 99 | startActivity(new Intent(MainActivity.this, BlogActivity.class)); 100 | break; 101 | case R.id.nav_ver: 102 | break; 103 | case R.id.nav_about: 104 | break; 105 | } 106 | menuItem.setChecked(true); 107 | drawerLayout.closeDrawers(); 108 | return true; 109 | } 110 | }); 111 | 112 | 113 | initToolbar(); 114 | initTabLayout(); 115 | 116 | 117 | } 118 | 119 | private void initTabLayout() { 120 | viewPager = findView(R.id.viewPager); 121 | 122 | tabLayout = findView(R.id.tabs); 123 | List tabList = new ArrayList<>(); 124 | tabList.add("Tab1"); 125 | tabList.add("Tab2"); 126 | tabList.add("Tab3"); 127 | tabList.add("Tab4"); 128 | tabList.add("Tab5"); 129 | tabList.add("Tab6"); 130 | tabList.add("Tab7"); 131 | tabLayout.setTabMode(TabLayout.MODE_SCROLLABLE);//设置tab模式,当前为系统默认模式 132 | //此处代码设置无效,不知道为啥???xml属性是可以的 133 | // tabLayout.setTabTextColors(android.R.color.white, android.R.color.holo_red_dark);//设置TabLayout两种状态 134 | tabLayout.addTab(tabLayout.newTab().setText(tabList.get(0)));//添加tab选项卡 135 | tabLayout.addTab(tabLayout.newTab().setText(tabList.get(1))); 136 | tabLayout.addTab(tabLayout.newTab().setText(tabList.get(2))); 137 | tabLayout.addTab(tabLayout.newTab().setText("Tab4")); 138 | tabLayout.addTab(tabLayout.newTab().setText("Tab5")); 139 | tabLayout.addTab(tabLayout.newTab().setText("Tab6")); 140 | tabLayout.addTab(tabLayout.newTab().setText("Tab7")); 141 | 142 | List fragmentList = new ArrayList<>(); 143 | for (int i = 0; i < tabList.size(); i++) { 144 | Fragment f1 = new TabFragment(); 145 | Bundle bundle = new Bundle(); 146 | bundle.putString("content", "http://blog.csdn.net/feiduclear_up \n CSDN 废墟的树"); 147 | f1.setArguments(bundle); 148 | fragmentList.add(f1); 149 | } 150 | 151 | TabFragmentAdapter fragmentAdapter = new TabFragmentAdapter(getSupportFragmentManager(), fragmentList, tabList); 152 | viewPager.setAdapter(fragmentAdapter);//给ViewPager设置适配器 153 | tabLayout.setupWithViewPager(viewPager);//将TabLayout和ViewPager关联起来。 154 | tabLayout.setTabsFromPagerAdapter(fragmentAdapter);//给Tabs设置适配器 155 | 156 | } 157 | 158 | private void initToolbar() { 159 | toolbar = findView(R.id.toolbar); 160 | setSupportActionBar(toolbar); 161 | getSupportActionBar().setDisplayShowTitleEnabled(false); 162 | toolbar.setTitle("废墟的树"); 163 | toolbar.setSubtitle("CSDN"); 164 | toolbar.setLogo(R.drawable.ic_launcher); 165 | toolbar.setNavigationIcon(R.drawable.ic_list_black_24dp); 166 | // getSupportActionBar().setDisplayHomeAsUpEnabled(true); 167 | toolbar.setOnMenuItemClickListener(this); 168 | } 169 | 170 | 171 | @Override 172 | public boolean onCreateOptionsMenu(Menu menu) { 173 | // Inflate the menu; this adds items to the action bar if it is present. 174 | getMenuInflater().inflate(R.menu.menu_main, menu); 175 | return true; 176 | } 177 | 178 | @Override 179 | public boolean onOptionsItemSelected(MenuItem item) { 180 | // Handle action bar item clicks here. The action bar will 181 | // automatically handle clicks on the Home/Up button, so long 182 | // as you specify a parent activity in AndroidManifest.xml. 183 | int id = item.getItemId(); 184 | 185 | //noinspection SimplifiableIfStatement 186 | if (id == R.id.action_settings) { 187 | return true; 188 | } 189 | if (id == android.R.id.home) { 190 | drawerLayout.openDrawer(GravityCompat.START); 191 | return true; 192 | } 193 | 194 | return super.onOptionsItemSelected(item); 195 | } 196 | 197 | 198 | @Override 199 | public boolean onMenuItemClick(MenuItem item) { 200 | 201 | switch (item.getItemId()) { 202 | case R.id.action_edit: 203 | Toast.makeText(this, "查找按钮", Toast.LENGTH_SHORT).show(); 204 | break; 205 | case R.id.action_share: 206 | Toast.makeText(this, "分享按钮", Toast.LENGTH_SHORT).show(); 207 | break; 208 | } 209 | 210 | return true; 211 | } 212 | } 213 | -------------------------------------------------------------------------------- /app/src/main/java/com/xjp/androidtoolbardemo/activity/TabFragment.java: -------------------------------------------------------------------------------- 1 | package com.xjp.androidtoolbardemo.activity; 2 | 3 | import android.content.Intent; 4 | import android.os.Bundle; 5 | import android.support.annotation.Nullable; 6 | import android.support.v4.app.Fragment; 7 | import android.support.v7.widget.DefaultItemAnimator; 8 | import android.support.v7.widget.LinearLayoutManager; 9 | import android.support.v7.widget.RecyclerView; 10 | import android.view.LayoutInflater; 11 | import android.view.View; 12 | import android.view.ViewGroup; 13 | 14 | import com.xjp.androidtoolbardemo.R; 15 | import com.xjp.androidtoolbardemo.adapter.RecyclerAdapter; 16 | import com.xjp.androidtoolbardemo.model.ModelBean; 17 | 18 | import java.util.ArrayList; 19 | import java.util.List; 20 | 21 | /** 22 | * Description: 23 | * User: xjp 24 | * Date: 2015/6/15 25 | * Time: 15:03 26 | */ 27 | 28 | public class TabFragment extends Fragment { 29 | 30 | private String content; 31 | private View view; 32 | private RecyclerView recyclerView; 33 | 34 | private List beanList; 35 | private RecyclerAdapter adapter; 36 | 37 | private String des[] = {"云层里的阳光", "好美的海滩", "好美的海滩", "夕阳西下的美景", "夕阳西下的美景" 38 | , "夕阳西下的美景", "夕阳西下的美景", "夕阳西下的美景", "好美的海滩"}; 39 | 40 | private int resId[] = {R.drawable.img1, R.drawable.img2, R.drawable.img2, R.drawable.img3, 41 | R.drawable.img4, R.drawable.img5, R.drawable.img3, R.drawable.img1}; 42 | 43 | 44 | @Override 45 | public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 46 | view = inflater.inflate(R.layout.item, container, false); 47 | return view; 48 | } 49 | 50 | @Override 51 | public void onActivityCreated(@Nullable Bundle savedInstanceState) { 52 | super.onActivityCreated(savedInstanceState); 53 | content = getArguments().getString("content"); 54 | recyclerView = (RecyclerView) view.findViewById(R.id.recyclerView); 55 | recyclerView.setLayoutManager(new LinearLayoutManager(getActivity())); 56 | recyclerView.setItemAnimator(new DefaultItemAnimator()); 57 | initData(); 58 | } 59 | 60 | 61 | private void initData() { 62 | beanList = new ArrayList<>(); 63 | for (int i = 0; i < 8; i++) { 64 | ModelBean bean = new ModelBean(); 65 | bean.setResId(resId[i]); 66 | bean.setTitle(des[i]); 67 | beanList.add(bean); 68 | } 69 | adapter = new RecyclerAdapter(getActivity(), beanList); 70 | recyclerView.setAdapter(adapter); 71 | adapter.setOnItemClickListener(new RecyclerAdapter.OnItemClickListener() { 72 | @Override 73 | public void onItemClick(int position, Object object) { 74 | startActivity(new Intent(getActivity(), TwoActivity.class)); 75 | } 76 | }); 77 | } 78 | } 79 | -------------------------------------------------------------------------------- /app/src/main/java/com/xjp/androidtoolbardemo/activity/TwoActivity.java: -------------------------------------------------------------------------------- 1 | package com.xjp.androidtoolbardemo.activity; 2 | 3 | import android.support.design.widget.CollapsingToolbarLayout; 4 | import android.support.v7.app.ActionBar; 5 | import android.support.v7.widget.Toolbar; 6 | import android.view.MenuItem; 7 | 8 | import com.xjp.androidtoolbardemo.R; 9 | 10 | /** 11 | * Description: 12 | * User: xjp 13 | * Date: 2015/6/17 14 | * Time: 9:49 15 | */ 16 | 17 | public class TwoActivity extends BaseActivity { 18 | 19 | private Toolbar toolbar; 20 | private CollapsingToolbarLayout collapsingToolbar; 21 | 22 | @Override 23 | protected int getContentView() { 24 | return R.layout.activity_two; 25 | } 26 | 27 | @Override 28 | protected void initView() { 29 | toolbar = findView(R.id.toolbar); 30 | setSupportActionBar(toolbar); 31 | ActionBar actionBar = getSupportActionBar(); 32 | actionBar.setDisplayHomeAsUpEnabled(true); 33 | 34 | collapsingToolbar = 35 | findView(R.id.collapsing_toolbar); 36 | collapsingToolbar.setTitle("CSDN废墟的树"); 37 | } 38 | 39 | @Override 40 | public boolean onOptionsItemSelected(MenuItem item) { 41 | if (item.getItemId() == android.R.id.home) { 42 | finish(); 43 | return true; 44 | } 45 | 46 | return super.onOptionsItemSelected(item); 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /app/src/main/java/com/xjp/androidtoolbardemo/adapter/RecyclerAdapter.java: -------------------------------------------------------------------------------- 1 | package com.xjp.androidtoolbardemo.adapter; 2 | 3 | import android.content.Context; 4 | import android.content.res.Resources; 5 | import android.graphics.Bitmap; 6 | import android.graphics.BitmapFactory; 7 | import android.support.v7.graphics.Palette; 8 | import android.support.v7.widget.RecyclerView; 9 | import android.view.LayoutInflater; 10 | import android.view.View; 11 | import android.view.ViewGroup; 12 | import android.widget.ImageView; 13 | import android.widget.TextView; 14 | 15 | import com.xjp.androidtoolbardemo.R; 16 | import com.xjp.androidtoolbardemo.model.ModelBean; 17 | 18 | import java.util.List; 19 | 20 | /** 21 | * Description:RecyclerView 适配器 22 | * User: xjp 23 | * Date: 2015/6/8 24 | * Time: 10:15 25 | */ 26 | 27 | public class RecyclerAdapter extends RecyclerView.Adapter { 28 | 29 | 30 | private Context context; 31 | private List list; 32 | private Resources res; 33 | private OnItemClickListener listener; 34 | 35 | public RecyclerAdapter(Context context, List list) { 36 | this.context = context; 37 | this.list = list; 38 | res = context.getResources(); 39 | } 40 | 41 | 42 | @Override 43 | public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 44 | View view = LayoutInflater.from(context).inflate(R.layout.item_card_view, parent, false); 45 | return new MyViewHolder(view); 46 | } 47 | 48 | @Override 49 | public void onBindViewHolder(final MyViewHolder holder, final int position) { 50 | 51 | final ModelBean bean = list.get(position); 52 | holder.title.setText(bean.getTitle()); 53 | holder.imageView.setImageResource(bean.getResId()); 54 | Bitmap bitmap = BitmapFactory.decodeResource(res, bean.getResId()); 55 | //异步获得bitmap图片颜色值 56 | Palette.from(bitmap).generate(new Palette.PaletteAsyncListener() { 57 | @Override 58 | public void onGenerated(Palette palette) { 59 | Palette.Swatch vibrant = palette.getVibrantSwatch();//有活力 60 | Palette.Swatch c = palette.getDarkVibrantSwatch();//有活力 暗色 61 | Palette.Swatch d = palette.getLightVibrantSwatch();//有活力 亮色 62 | Palette.Swatch f = palette.getMutedSwatch();//柔和 63 | Palette.Swatch a = palette.getDarkMutedSwatch();//柔和 暗色 64 | Palette.Swatch b = palette.getLightMutedSwatch();//柔和 亮色 65 | 66 | if (vibrant != null) { 67 | int color1 = vibrant.getBodyTextColor();//内容颜色 68 | int color2 = vibrant.getTitleTextColor();//标题颜色 69 | int color3 = vibrant.getRgb();//rgb颜色 70 | 71 | holder.title.setBackgroundColor( 72 | vibrant.getRgb()); 73 | holder.title.setTextColor( 74 | vibrant.getTitleTextColor()); 75 | } 76 | } 77 | }); 78 | 79 | /** 80 | * 调用接口回调 81 | */ 82 | holder.itemView.setOnClickListener(new View.OnClickListener() { 83 | @Override 84 | public void onClick(View v) { 85 | if (null != listener) 86 | listener.onItemClick(position, bean); 87 | } 88 | }); 89 | } 90 | 91 | @Override 92 | public int getItemCount() { 93 | return null == list ? 0 : list.size(); 94 | } 95 | 96 | 97 | public class MyViewHolder extends RecyclerView.ViewHolder { 98 | 99 | private ImageView imageView; 100 | private TextView title; 101 | 102 | public MyViewHolder(View view) { 103 | super(view); 104 | imageView = (ImageView) view.findViewById(R.id.pic); 105 | title = (TextView) view.findViewById(R.id.name); 106 | } 107 | } 108 | 109 | /** 110 | * 内部接口回调方法 111 | */ 112 | public interface OnItemClickListener { 113 | void onItemClick(int position, Object object); 114 | } 115 | 116 | /** 117 | * 设置监听方法 118 | * 119 | * @param listener 120 | */ 121 | public void setOnItemClickListener(OnItemClickListener listener) { 122 | this.listener = listener; 123 | } 124 | 125 | } 126 | -------------------------------------------------------------------------------- /app/src/main/java/com/xjp/androidtoolbardemo/adapter/TabFragmentAdapter.java: -------------------------------------------------------------------------------- 1 | package com.xjp.androidtoolbardemo.adapter; 2 | 3 | import android.support.v4.app.Fragment; 4 | import android.support.v4.app.FragmentManager; 5 | import android.support.v4.app.FragmentStatePagerAdapter; 6 | 7 | import java.util.List; 8 | 9 | /** 10 | * Description: 11 | * User: xjp 12 | * Date: 2015/6/15 13 | * Time: 15:12 14 | */ 15 | 16 | public class TabFragmentAdapter extends FragmentStatePagerAdapter { 17 | 18 | private List mFragments; 19 | private List mTitles; 20 | 21 | public TabFragmentAdapter(FragmentManager fm, List fragments, List titles) { 22 | super(fm); 23 | mFragments = fragments; 24 | mTitles = titles; 25 | } 26 | 27 | @Override 28 | public Fragment getItem(int position) { 29 | return mFragments.get(position); 30 | } 31 | 32 | @Override 33 | public int getCount() { 34 | return mFragments.size(); 35 | } 36 | 37 | @Override 38 | public CharSequence getPageTitle(int position) { 39 | return mTitles.get(position); 40 | } 41 | 42 | 43 | } 44 | -------------------------------------------------------------------------------- /app/src/main/java/com/xjp/androidtoolbardemo/model/ModelBean.java: -------------------------------------------------------------------------------- 1 | package com.xjp.androidtoolbardemo.model; 2 | 3 | /** 4 | * Description: 5 | * User: xjp 6 | * Date: 2015/6/8 7 | * Time: 10:20 8 | */ 9 | 10 | public class ModelBean { 11 | 12 | private String title; 13 | private int resId; 14 | 15 | public String getTitle() { 16 | return title; 17 | } 18 | 19 | public void setTitle(String title) { 20 | this.title = title; 21 | } 22 | 23 | public int getResId() { 24 | return resId; 25 | } 26 | 27 | public void setResId(int resId) { 28 | this.resId = resId; 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujinping/AndroidDesignLibrary/5eda792cedfdb62af89902e69f77544aca4de1fc/app/src/main/res/drawable-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujinping/AndroidDesignLibrary/5eda792cedfdb62af89902e69f77544aca4de1fc/app/src/main/res/drawable-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/header.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujinping/AndroidDesignLibrary/5eda792cedfdb62af89902e69f77544aca4de1fc/app/src/main/res/drawable-xhdpi/header.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_account_balance_black_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujinping/AndroidDesignLibrary/5eda792cedfdb62af89902e69f77544aca4de1fc/app/src/main/res/drawable-xhdpi/ic_account_balance_black_24dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_backspace_black_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujinping/AndroidDesignLibrary/5eda792cedfdb62af89902e69f77544aca4de1fc/app/src/main/res/drawable-xhdpi/ic_backspace_black_24dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_discuss.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujinping/AndroidDesignLibrary/5eda792cedfdb62af89902e69f77544aca4de1fc/app/src/main/res/drawable-xhdpi/ic_discuss.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_error_outline_black_36dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujinping/AndroidDesignLibrary/5eda792cedfdb62af89902e69f77544aca4de1fc/app/src/main/res/drawable-xhdpi/ic_error_outline_black_36dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujinping/AndroidDesignLibrary/5eda792cedfdb62af89902e69f77544aca4de1fc/app/src/main/res/drawable-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_list_black_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujinping/AndroidDesignLibrary/5eda792cedfdb62af89902e69f77544aca4de1fc/app/src/main/res/drawable-xhdpi/ic_list_black_24dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_list_black_48dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujinping/AndroidDesignLibrary/5eda792cedfdb62af89902e69f77544aca4de1fc/app/src/main/res/drawable-xhdpi/ic_list_black_48dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_power_settings_new_black_36dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujinping/AndroidDesignLibrary/5eda792cedfdb62af89902e69f77544aca4de1fc/app/src/main/res/drawable-xhdpi/ic_power_settings_new_black_36dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_settings_applications_black_36dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujinping/AndroidDesignLibrary/5eda792cedfdb62af89902e69f77544aca4de1fc/app/src/main/res/drawable-xhdpi/ic_settings_applications_black_36dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/image.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujinping/AndroidDesignLibrary/5eda792cedfdb62af89902e69f77544aca4de1fc/app/src/main/res/drawable-xhdpi/image.jpg -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/img1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujinping/AndroidDesignLibrary/5eda792cedfdb62af89902e69f77544aca4de1fc/app/src/main/res/drawable-xhdpi/img1.jpg -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/img2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujinping/AndroidDesignLibrary/5eda792cedfdb62af89902e69f77544aca4de1fc/app/src/main/res/drawable-xhdpi/img2.jpg -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/img3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujinping/AndroidDesignLibrary/5eda792cedfdb62af89902e69f77544aca4de1fc/app/src/main/res/drawable-xhdpi/img3.jpg -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/img4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujinping/AndroidDesignLibrary/5eda792cedfdb62af89902e69f77544aca4de1fc/app/src/main/res/drawable-xhdpi/img4.jpg -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/img5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujinping/AndroidDesignLibrary/5eda792cedfdb62af89902e69f77544aca4de1fc/app/src/main/res/drawable-xhdpi/img5.jpg -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/img6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujinping/AndroidDesignLibrary/5eda792cedfdb62af89902e69f77544aca4de1fc/app/src/main/res/drawable-xhdpi/img6.jpg -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/img7.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujinping/AndroidDesignLibrary/5eda792cedfdb62af89902e69f77544aca4de1fc/app/src/main/res/drawable-xhdpi/img7.jpg -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/img8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujinping/AndroidDesignLibrary/5eda792cedfdb62af89902e69f77544aca4de1fc/app/src/main/res/drawable-xhdpi/img8.jpg -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/bg1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujinping/AndroidDesignLibrary/5eda792cedfdb62af89902e69f77544aca4de1fc/app/src/main/res/drawable-xxhdpi/bg1.jpg -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/bg2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujinping/AndroidDesignLibrary/5eda792cedfdb62af89902e69f77544aca4de1fc/app/src/main/res/drawable-xxhdpi/bg2.jpg -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/bg3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujinping/AndroidDesignLibrary/5eda792cedfdb62af89902e69f77544aca4de1fc/app/src/main/res/drawable-xxhdpi/bg3.jpg -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/bg4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujinping/AndroidDesignLibrary/5eda792cedfdb62af89902e69f77544aca4de1fc/app/src/main/res/drawable-xxhdpi/bg4.jpg -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xujinping/AndroidDesignLibrary/5eda792cedfdb62af89902e69f77544aca4de1fc/app/src/main/res/drawable-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_blog.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 13 | 14 | 19 | 20 | 25 | 26 | 27 | 32 | 33 | 39 | 40 | 41 |