diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..2d64351 --- /dev/null +++ b/.gitignore @@ -0,0 +1,62 @@ +# Built application files +*.apk +*.ap_ + +# Files for the ART/Dalvik VM +*.dex + +# Java class files +*.class + +# Generated files +bin/ +gen/ +out/ + +# Gradle files +.gradle/ +build/ + +# Local configuration file (sdk path, etc) +local.properties + +# Proguard folder generated by Eclipse +proguard/ + +# Log Files +*.log + +# Android Studio Navigation editor temp files +.navigation/ + +# Android Studio captures folder +captures/ + +# IntelliJ +*.iml +*.idea/ +*.settings/ +*.classpath +*.project + +# Keystore files +# Uncomment the following line if you do not want to check your keystore files in. +#*.jks + +# External native build folder generated in Android Studio 2.2 and later +.externalNativeBuild + +# Google Services (e.g. APIs or Firebase) +google-services.json + +# Freeline +freeline.py +freeline/ +freeline_project_description.json + +# fastlane +fastlane/report.xml +fastlane/Preview.html +fastlane/screenshots +fastlane/test_output +fastlane/readme.md \ No newline at end of file diff --git a/app/.gitignore b/app/.gitignore new file mode 100644 index 0000000..796b96d --- /dev/null +++ b/app/.gitignore @@ -0,0 +1 @@ +/build diff --git a/app/build.gradle b/app/build.gradle new file mode 100644 index 0000000..d3e8f6f --- /dev/null +++ b/app/build.gradle @@ -0,0 +1,44 @@ +apply plugin: 'com.android.application' + +android { + compileSdkVersion 28 + defaultConfig { + applicationId "org.incoder.uiwidget" + minSdkVersion 19 + targetSdkVersion 28 + versionCode 1 + versionName "1.0" + testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" + vectorDrawables.useSupportLibrary = true + } + buildTypes { + release { + minifyEnabled false + proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' + } + } + + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 + } +} + +dependencies { + implementation fileTree(dir: 'libs', include: ['*.jar']) + implementation 'com.android.support:appcompat-v7:28.0.0' + implementation 'com.android.support:design:28.0.0' + implementation 'com.android.support.constraint:constraint-layout:1.0.2' + implementation 'com.android.support:cardview-v7:28.0.0' + implementation 'com.android.support:gridlayout-v7:28.0.0' + implementation 'com.jakewharton:butterknife:8.8.1' + implementation 'com.android.support:support-v4:28.0.0' + implementation 'com.android.support:support-vector-drawable:28.0.0' + implementation 'com.android.support:recyclerview-v7:28.0.0' + testImplementation 'junit:junit:4.12' + annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1' + androidTestImplementation 'com.android.support.test:runner:1.0.1' + androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1' + implementation 'com.google.android.gms:play-services-ads:12.0.1' + implementation 'com.google.android.gms:play-services-maps:12.0.1' +} diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro new file mode 100644 index 0000000..f1b4245 --- /dev/null +++ b/app/proguard-rules.pro @@ -0,0 +1,21 @@ +# Add project specific ProGuard rules here. +# You can control the set of applied configuration files using the +# proguardFiles setting in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} + +# Uncomment this to preserve the line number information for +# debugging stack traces. +#-keepattributes SourceFile,LineNumberTable + +# If you keep the line number information, uncomment this to +# hide the original source file name. +#-renamesourcefileattribute SourceFile diff --git a/app/src/androidTest/java/org/incoder/uiwidget/ExampleInstrumentedTest.java b/app/src/androidTest/java/org/incoder/uiwidget/ExampleInstrumentedTest.java new file mode 100644 index 0000000..09e80e7 --- /dev/null +++ b/app/src/androidTest/java/org/incoder/uiwidget/ExampleInstrumentedTest.java @@ -0,0 +1,26 @@ +package org.incoder.uiwidget; + +import android.content.Context; +import android.support.test.InstrumentationRegistry; +import android.support.test.runner.AndroidJUnit4; + +import org.junit.Test; +import org.junit.runner.RunWith; + +import static org.junit.Assert.*; + +/** + * Instrumented test, which will execute on an Android device. + * + * @see Testing documentation + */ +@RunWith(AndroidJUnit4.class) +public class ExampleInstrumentedTest { + @Test + public void useAppContext() { + // Context of the app under test. + Context appContext = InstrumentationRegistry.getTargetContext(); + + assertEquals("org.incoder.uiwidget", appContext.getPackageName()); + } +} diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml new file mode 100644 index 0000000..a028a1b --- /dev/null +++ b/app/src/main/AndroidManifest.xml @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/java/org/incoder/uiwidget/BasePagerAdapter.java b/app/src/main/java/org/incoder/uiwidget/BasePagerAdapter.java new file mode 100644 index 0000000..234be6c --- /dev/null +++ b/app/src/main/java/org/incoder/uiwidget/BasePagerAdapter.java @@ -0,0 +1,67 @@ +package org.incoder.uiwidget; + +import android.support.annotation.NonNull; +import android.support.v4.app.Fragment; +import android.support.v4.app.FragmentManager; +import android.support.v4.app.FragmentStatePagerAdapter; + +import java.util.ArrayList; + +/** + * BasePagerAdapter + * + * @author Jerry xu + * @date 4/6/2018 6:00 AM. + */ +public class BasePagerAdapter extends FragmentStatePagerAdapter { + + private ArrayList fragments; + private ArrayList titles; + private String[] mTitles; + + public BasePagerAdapter(FragmentManager fm, + ArrayList fragments) { + super(fm); + this.fragments = fragments; + } + + public BasePagerAdapter(FragmentManager fm, + ArrayList fragments, ArrayList titles) { + super(fm); + this.fragments = fragments; + this.titles = titles; + } + + public BasePagerAdapter(FragmentManager fm, + ArrayList fragments, String[] mTitles) { + super(fm); + this.fragments = fragments; + this.mTitles = mTitles; + } + + @Override + public Fragment getItem(int position) { + return fragments.get(position); + } + + @Override + public int getCount() { + return fragments.size(); + } + + @Override + public int getItemPosition(@NonNull Object object) { + return POSITION_NONE; + } + + @Override + public CharSequence getPageTitle(int position) { + if (titles == null || titles.size() == 0) { + return mTitles == null ? "" : mTitles[position]; + } else if (mTitles == null || mTitles.length == 0) { + return titles.get(position); + } else { + return ""; + } + } +} diff --git a/app/src/main/java/org/incoder/uiwidget/MainActivity.java b/app/src/main/java/org/incoder/uiwidget/MainActivity.java new file mode 100644 index 0000000..3f71b63 --- /dev/null +++ b/app/src/main/java/org/incoder/uiwidget/MainActivity.java @@ -0,0 +1,322 @@ +package org.incoder.uiwidget; + +import android.content.Intent; +import android.os.Bundle; +import android.support.annotation.NonNull; +import android.support.design.widget.NavigationView; +import android.support.design.widget.TabLayout; +import android.support.v4.app.Fragment; +import android.support.v4.view.GravityCompat; +import android.support.v4.view.ViewPager; +import android.support.v4.widget.DrawerLayout; +import android.support.v7.app.ActionBarDrawerToggle; +import android.support.v7.app.AppCompatActivity; +import android.support.v7.widget.Toolbar; +import android.view.Menu; +import android.view.MenuItem; +import android.widget.Toast; + +import org.incoder.uiwidget.button.ButtonFragment; +import org.incoder.uiwidget.button.CheckBoxFragment; +import org.incoder.uiwidget.button.FloatingActionButtonFragment; +import org.incoder.uiwidget.button.ImageButtonFragment; +import org.incoder.uiwidget.button.RadioButtonFragment; +import org.incoder.uiwidget.button.RadioGroupFragment; +import org.incoder.uiwidget.button.SwitchFragment; +import org.incoder.uiwidget.button.ToggleButtonFragment; +import org.incoder.uiwidget.code.CodeActivity; +import org.incoder.uiwidget.containers.AppBarLayoutFragment; +import org.incoder.uiwidget.containers.BottomNavigationFragment; +import org.incoder.uiwidget.containers.CardViewFragment; +import org.incoder.uiwidget.containers.IncludeFragment; +import org.incoder.uiwidget.containers.NavigationViewFragment; +import org.incoder.uiwidget.containers.RecyclerViewFragment; +import org.incoder.uiwidget.containers.RequestFocusFragment; +import org.incoder.uiwidget.containers.ScrollViewFragment; +import org.incoder.uiwidget.containers.SpinnerFragment; +import org.incoder.uiwidget.containers.TabLayoutFragment; +import org.incoder.uiwidget.containers.TabsFragment; +import org.incoder.uiwidget.containers.ToolbarFragment; +import org.incoder.uiwidget.containers.ViewFragment; +import org.incoder.uiwidget.containers.ViewPagerFragment; +import org.incoder.uiwidget.containers.ViewStubFragment; +import org.incoder.uiwidget.containers.fragmentFragment; +import org.incoder.uiwidget.google.AdViewFragment; +import org.incoder.uiwidget.google.MapViewFragment; +import org.incoder.uiwidget.layout.ConstraintLayoutFragment; +import org.incoder.uiwidget.layout.FrameLayoutFragment; +import org.incoder.uiwidget.layout.GuidelineFragment; +import org.incoder.uiwidget.layout.LinearLayoutFragment; +import org.incoder.uiwidget.layout.SpaceFragment; +import org.incoder.uiwidget.layout.TableLayoutFragment; +import org.incoder.uiwidget.layout.TableRowFragment; +import org.incoder.uiwidget.legacy.GridLayoutFragment; +import org.incoder.uiwidget.legacy.GridViewFragment; +import org.incoder.uiwidget.legacy.ListViewFragment; +import org.incoder.uiwidget.legacy.RelativeLayoutFragment; +import org.incoder.uiwidget.legacy.TabHostFragment; +import org.incoder.uiwidget.sheet.SheetActivity; +import org.incoder.uiwidget.statusbar.StatusBarActivity; +import org.incoder.uiwidget.text.AutoCompleteTextViewFragment; +import org.incoder.uiwidget.text.CheckedTextViewFragment; +import org.incoder.uiwidget.text.DateFragment; +import org.incoder.uiwidget.text.EmailFragment; +import org.incoder.uiwidget.text.MultiAutoCompleteTextViewFragment; +import org.incoder.uiwidget.text.MultilineTextFragment; +import org.incoder.uiwidget.text.NumberFragment; +import org.incoder.uiwidget.text.PasswordFragment; +import org.incoder.uiwidget.text.PhoneFragment; +import org.incoder.uiwidget.text.PlainTextFragment; +import org.incoder.uiwidget.text.PostalAddressFragment; +import org.incoder.uiwidget.text.TextInputLayoutFragment; +import org.incoder.uiwidget.text.TextViewFragment; +import org.incoder.uiwidget.text.TimeFragment; +import org.incoder.uiwidget.widgets.CalendarViewFragment; +import org.incoder.uiwidget.widgets.DividerFragment; +import org.incoder.uiwidget.widgets.ImageViewFragment; +import org.incoder.uiwidget.widgets.ProgressBarFragment; +import org.incoder.uiwidget.widgets.RatingBarFragment; +import org.incoder.uiwidget.widgets.SearchViewFragment; +import org.incoder.uiwidget.widgets.SeekBarFragment; +import org.incoder.uiwidget.widgets.SurfaceViewFragment; +import org.incoder.uiwidget.widgets.TextureViewFragment; +import org.incoder.uiwidget.widgets.VideoViewFragment; +import org.incoder.uiwidget.widgets.WebViewFragment; + +import java.util.ArrayList; +import java.util.List; + +import butterknife.BindView; +import butterknife.ButterKnife; + +/** + * MainActivity + * + * @author Jerry xu + * @date 4/6/2018 1:00 AM. + */ +public class MainActivity extends AppCompatActivity + implements NavigationView.OnNavigationItemSelectedListener { + + @BindView(R.id.toolbar) + Toolbar toolbar; + @BindView(R.id.nav_view) + NavigationView navView; + @BindView(R.id.drawer_layout) + DrawerLayout drawerLayout; + @BindView(R.id.tabs) + TabLayout tabLayout; + @BindView(R.id.view_pager) + ViewPager viewPager; + + private List fragments; + private String[] mTexts = {"TextView", "Plain Text", "Password", "E-mail", "Phone", "Postal Address", + "Multiline Text", "Time", "Date", "Number", "AutoCompleteTextView", "MultiAutoCompleteTextView", "CheckedTextView", "TextInputLayout"}; + private String[] mButtons = {"Button", "ImageButton", "CheckBox", "RadioGroup", "RadioButton", "ToggleButton", + "Switch", "FloatingActionButton"}; + private String[] mWidgets = {"View", "ImageView", "WebView", "VideoView", "CalendarView", "ProgressBar", + "SeekBar", "RatingBar", "SearchView", "TextureView", "SurfaceView", "Divider"}; + private String[] mLayouts = {"ConstraintLayout", "Guideline", "LinearLayout", "FrameLayout", "TableLayout", "TableRow", + "Space"}; + private String[] mContainers = {"Spinner", "RecyclerView", "ScrollView", "ViewPager", "CardView", "Tabs", + "AppBarLayout", "NavigationView", "BottomNavigation", "Toolbar", "TabLayout", "ViewStub", "", "", "", ""}; + private String[] mGoogles = {"AdView", "MapView"}; + private String[] mLegacies = {"GridLayout", "ListView", "TabHost", "RelativeLayout", "GridView"}; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_main); + ButterKnife.bind(this); + setSupportActionBar(toolbar); + + ActionBarDrawerToggle toggle = new ActionBarDrawerToggle( + this, drawerLayout, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close); + drawerLayout.addDrawerListener(toggle); + toggle.syncState(); + + navView.setNavigationItemSelectedListener(this); + setTopTab(mTexts); + } + + private void setTopTab(String[] mTabTitle) { + fragments = new ArrayList(); + + addFragment(mTabTitle); + viewPager.setAdapter(new BasePagerAdapter(getSupportFragmentManager(), (ArrayList) fragments, mTabTitle)); + viewPager.setOffscreenPageLimit(fragments.size()); + tabLayout.setupWithViewPager(viewPager); + tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() { + @Override + public void onTabSelected(TabLayout.Tab tab) { + viewPager.setCurrentItem(tab.getPosition()); + } + + @Override + public void onTabUnselected(TabLayout.Tab tab) { + + } + + @Override + public void onTabReselected(TabLayout.Tab tab) { + + } + }); + } + + private void addFragment(String[] mTabTitle) { + + int mTextLength = 14; + int mButtonLength = 8; + int mWidgetLength = 12; + int mLayoutLength = 7; + int mContainersLength = 16; + int mGoogleLength = 2; + int mLegacyLength = 5; + + if (mTabTitle.length == mTextLength) { + fragments.add(new TextViewFragment()); + fragments.add(new PlainTextFragment()); + fragments.add(new PasswordFragment()); + fragments.add(new EmailFragment()); + fragments.add(new PhoneFragment()); + fragments.add(new PostalAddressFragment()); + fragments.add(new MultilineTextFragment()); + fragments.add(new TimeFragment()); + fragments.add(new DateFragment()); + fragments.add(new NumberFragment()); + fragments.add(new AutoCompleteTextViewFragment()); + fragments.add(new MultiAutoCompleteTextViewFragment()); + fragments.add(new CheckedTextViewFragment()); + fragments.add(new TextInputLayoutFragment()); + } else if (mTabTitle.length == mButtonLength) { + fragments.add(new ButtonFragment()); + fragments.add(new ImageButtonFragment()); + fragments.add(new CheckBoxFragment()); + fragments.add(new RadioGroupFragment()); + fragments.add(new RadioButtonFragment()); + fragments.add(new ToggleButtonFragment()); + fragments.add(new SwitchFragment()); + fragments.add(new FloatingActionButtonFragment()); + } else if (mTabTitle.length == mWidgetLength) { + fragments.add(new ViewFragment()); + fragments.add(new ImageViewFragment()); + fragments.add(new WebViewFragment()); + fragments.add(new VideoViewFragment()); + fragments.add(new CalendarViewFragment()); + fragments.add(new ProgressBarFragment()); + fragments.add(new SeekBarFragment()); + fragments.add(new RatingBarFragment()); + fragments.add(new SearchViewFragment()); + fragments.add(new TextureViewFragment()); + fragments.add(new SurfaceViewFragment()); + fragments.add(new DividerFragment()); + } else if (mTabTitle.length == mLayoutLength) { + fragments.add(new ConstraintLayoutFragment()); + fragments.add(new GuidelineFragment()); + fragments.add(new LinearLayoutFragment()); + fragments.add(new FrameLayoutFragment()); + fragments.add(new TableLayoutFragment()); + fragments.add(new TableRowFragment()); + fragments.add(new SpaceFragment()); + + } else if (mTabTitle.length == mContainersLength) { + fragments.add(new SpinnerFragment()); + fragments.add(new RecyclerViewFragment()); + fragments.add(new ScrollViewFragment()); + fragments.add(new ViewPagerFragment()); + fragments.add(new CardViewFragment()); + fragments.add(new TabsFragment()); + fragments.add(new AppBarLayoutFragment()); + fragments.add(new NavigationViewFragment()); + fragments.add(new BottomNavigationFragment()); + fragments.add(new ToolbarFragment()); + fragments.add(new TabLayoutFragment()); + fragments.add(new ViewStubFragment()); + fragments.add(new IncludeFragment()); + fragments.add(new fragmentFragment()); + fragments.add(new ViewFragment()); + fragments.add(new RequestFocusFragment()); + } else if (mTabTitle.length == mGoogleLength) { + fragments.add(new AdViewFragment()); + fragments.add(new MapViewFragment()); + + } else if (mTabTitle.length == mLegacyLength) { + fragments.add(new GridLayoutFragment()); + fragments.add(new ListViewFragment()); + fragments.add(new TabHostFragment()); + fragments.add(new RelativeLayoutFragment()); + fragments.add(new GridViewFragment()); + + } + } + + @Override + public void onBackPressed() { + if (drawerLayout.isDrawerOpen(GravityCompat.START)) { + drawerLayout.closeDrawer(GravityCompat.START); + } else { + super.onBackPressed(); + } + } + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + getMenuInflater().inflate(R.menu.main, menu); + return true; + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + int id = item.getItemId(); + if (id == R.id.action_settings) { + Toast.makeText(this, "onClick Settings", Toast.LENGTH_SHORT).show(); + return true; + } + return super.onOptionsItemSelected(item); + } + + @Override + public boolean onNavigationItemSelected(@NonNull MenuItem item) { + switch (item.getItemId()) { + case R.id.nav_text: + setTopTab(mTexts); + break; + case R.id.nav_button: + setTopTab(mButtons); + break; + case R.id.nav_widgets: + setTopTab(mWidgets); + break; + case R.id.nav_layout: + setTopTab(mLayouts); + break; + case R.id.nav_containers: + setTopTab(mContainers); + break; + case R.id.nav_google: + setTopTab(mGoogles); + break; + case R.id.nav_legacy: + setTopTab(mLegacies); + break; + /*// 自定义控件 + case R.id.nav_custom: + break;*/ + case R.id.nav_code: + startActivity(new Intent(this, CodeActivity.class)); + break; + case R.id.nav_bar: + startActivity(new Intent(this, StatusBarActivity.class)); + break; + case R.id.nav_sheet: + startActivity(new Intent(this, SheetActivity.class)); + break; + default: + break; + } + + drawerLayout.closeDrawer(GravityCompat.START); + return true; + } +} diff --git a/app/src/main/java/org/incoder/uiwidget/button/ButtonFragment.java b/app/src/main/java/org/incoder/uiwidget/button/ButtonFragment.java new file mode 100644 index 0000000..859aad3 --- /dev/null +++ b/app/src/main/java/org/incoder/uiwidget/button/ButtonFragment.java @@ -0,0 +1,34 @@ +package org.incoder.uiwidget.button; + + +import android.os.Bundle; +import android.support.annotation.NonNull; +import android.support.v4.app.Fragment; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import org.incoder.uiwidget.R; + +/** + * ButtonFragment + * + * @author Jerry xu + * @date 4/6/2018 8:00 AM. + */ +public class ButtonFragment extends Fragment { + + + public ButtonFragment() { + // Required empty public constructor + } + + + @Override + public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + // Inflate the layout for this fragment + return inflater.inflate(R.layout.fragment_button, container, false); + } + +} diff --git a/app/src/main/java/org/incoder/uiwidget/button/CheckBoxFragment.java b/app/src/main/java/org/incoder/uiwidget/button/CheckBoxFragment.java new file mode 100644 index 0000000..0b8e7a4 --- /dev/null +++ b/app/src/main/java/org/incoder/uiwidget/button/CheckBoxFragment.java @@ -0,0 +1,34 @@ +package org.incoder.uiwidget.button; + + +import android.os.Bundle; +import android.support.annotation.NonNull; +import android.support.v4.app.Fragment; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import org.incoder.uiwidget.R; + +/** + * CheckBoxFragment + * + * @author Jerry xu + * @date 4/6/2018 8:00 AM. + */ +public class CheckBoxFragment extends Fragment { + + + public CheckBoxFragment() { + // Required empty public constructor + } + + + @Override + public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + // Inflate the layout for this fragment + return inflater.inflate(R.layout.fragment_check_box, container, false); + } + +} diff --git a/app/src/main/java/org/incoder/uiwidget/button/FloatingActionButtonFragment.java b/app/src/main/java/org/incoder/uiwidget/button/FloatingActionButtonFragment.java new file mode 100644 index 0000000..bf89d7b --- /dev/null +++ b/app/src/main/java/org/incoder/uiwidget/button/FloatingActionButtonFragment.java @@ -0,0 +1,34 @@ +package org.incoder.uiwidget.button; + + +import android.os.Bundle; +import android.support.annotation.NonNull; +import android.support.v4.app.Fragment; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import org.incoder.uiwidget.R; + +/** + * FloatingActionButtonFragment + * + * @author Jerry xu + * @date 4/6/2018 8:00 AM. + */ +public class FloatingActionButtonFragment extends Fragment { + + + public FloatingActionButtonFragment() { + // Required empty public constructor + } + + + @Override + public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + // Inflate the layout for this fragment + return inflater.inflate(R.layout.fragment_floating_action_button, container, false); + } + +} diff --git a/app/src/main/java/org/incoder/uiwidget/button/ImageButtonFragment.java b/app/src/main/java/org/incoder/uiwidget/button/ImageButtonFragment.java new file mode 100644 index 0000000..8e7308b --- /dev/null +++ b/app/src/main/java/org/incoder/uiwidget/button/ImageButtonFragment.java @@ -0,0 +1,34 @@ +package org.incoder.uiwidget.button; + + +import android.os.Bundle; +import android.support.annotation.NonNull; +import android.support.v4.app.Fragment; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import org.incoder.uiwidget.R; + +/** + * ImageButtonFragment + * + * @author Jerry xu + * @date 4/6/2018 8:00 AM. + */ +public class ImageButtonFragment extends Fragment { + + + public ImageButtonFragment() { + // Required empty public constructor + } + + + @Override + public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + // Inflate the layout for this fragment + return inflater.inflate(R.layout.fragment_image_button, container, false); + } + +} diff --git a/app/src/main/java/org/incoder/uiwidget/button/RadioButtonFragment.java b/app/src/main/java/org/incoder/uiwidget/button/RadioButtonFragment.java new file mode 100644 index 0000000..1f6b77a --- /dev/null +++ b/app/src/main/java/org/incoder/uiwidget/button/RadioButtonFragment.java @@ -0,0 +1,34 @@ +package org.incoder.uiwidget.button; + + +import android.os.Bundle; +import android.support.annotation.NonNull; +import android.support.v4.app.Fragment; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import org.incoder.uiwidget.R; + +/** + * RadioButtonFragment + * + * @author Jerry xu + * @date 4/6/2018 8:00 AM. + */ +public class RadioButtonFragment extends Fragment { + + + public RadioButtonFragment() { + // Required empty public constructor + } + + + @Override + public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + // Inflate the layout for this fragment + return inflater.inflate(R.layout.fragment_radio_button, container, false); + } + +} diff --git a/app/src/main/java/org/incoder/uiwidget/button/RadioGroupFragment.java b/app/src/main/java/org/incoder/uiwidget/button/RadioGroupFragment.java new file mode 100644 index 0000000..68edd1c --- /dev/null +++ b/app/src/main/java/org/incoder/uiwidget/button/RadioGroupFragment.java @@ -0,0 +1,34 @@ +package org.incoder.uiwidget.button; + + +import android.os.Bundle; +import android.support.annotation.NonNull; +import android.support.v4.app.Fragment; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import org.incoder.uiwidget.R; + +/** + * RadioGroupFragment + * + * @author Jerry xu + * @date 4/6/2018 8:00 AM. + */ +public class RadioGroupFragment extends Fragment { + + + public RadioGroupFragment() { + // Required empty public constructor + } + + + @Override + public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + // Inflate the layout for this fragment + return inflater.inflate(R.layout.fragment_radio_group, container, false); + } + +} diff --git a/app/src/main/java/org/incoder/uiwidget/button/SwitchFragment.java b/app/src/main/java/org/incoder/uiwidget/button/SwitchFragment.java new file mode 100644 index 0000000..d52b7f8 --- /dev/null +++ b/app/src/main/java/org/incoder/uiwidget/button/SwitchFragment.java @@ -0,0 +1,34 @@ +package org.incoder.uiwidget.button; + + +import android.os.Bundle; +import android.support.annotation.NonNull; +import android.support.v4.app.Fragment; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import org.incoder.uiwidget.R; + +/** + * SwitchFragment + * + * @author Jerry xu + * @date 4/6/2018 8:00 AM. + */ +public class SwitchFragment extends Fragment { + + + public SwitchFragment() { + // Required empty public constructor + } + + + @Override + public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + // Inflate the layout for this fragment + return inflater.inflate(R.layout.fragment_switch, container, false); + } + +} diff --git a/app/src/main/java/org/incoder/uiwidget/button/ToggleButtonFragment.java b/app/src/main/java/org/incoder/uiwidget/button/ToggleButtonFragment.java new file mode 100644 index 0000000..0d35206 --- /dev/null +++ b/app/src/main/java/org/incoder/uiwidget/button/ToggleButtonFragment.java @@ -0,0 +1,34 @@ +package org.incoder.uiwidget.button; + + +import android.os.Bundle; +import android.support.annotation.NonNull; +import android.support.v4.app.Fragment; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import org.incoder.uiwidget.R; + +/** + * ToggleButtonFragment + * + * @author Jerry xu + * @date 4/6/2018 8:00 AM. + */ +public class ToggleButtonFragment extends Fragment { + + + public ToggleButtonFragment() { + // Required empty public constructor + } + + + @Override + public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + // Inflate the layout for this fragment + return inflater.inflate(R.layout.fragment_toggle_button, container, false); + } + +} diff --git a/app/src/main/java/org/incoder/uiwidget/code/CodeActivity.java b/app/src/main/java/org/incoder/uiwidget/code/CodeActivity.java new file mode 100644 index 0000000..0012b7b --- /dev/null +++ b/app/src/main/java/org/incoder/uiwidget/code/CodeActivity.java @@ -0,0 +1,105 @@ +package org.incoder.uiwidget.code; + +import android.os.Bundle; +import android.support.v7.app.AppCompatActivity; +import android.widget.RadioButton; +import android.widget.Toast; + +import org.incoder.uiwidget.R; + +import butterknife.BindView; +import butterknife.ButterKnife; +import butterknife.OnClick; + +public class CodeActivity extends AppCompatActivity { + + @BindView(R.id.edit_solid) + CodeEditText editSolid; + @BindView(R.id.edit_underline) + CodeEditText editUnderline; + @BindView(R.id.edit_hollow) + CodeEditText editHollow; + @BindView(R.id.rb_password_yes) + RadioButton rbPasswordYes; + @BindView(R.id.rb_password_no) + RadioButton rbPasswordNo; + @BindView(R.id.rb_cursor_yes) + RadioButton rbCursorYes; + @BindView(R.id.rb_cursor_no) + RadioButton rbCursorNo; + + @OnClick({R.id.rb_password_yes, R.id.rb_password_no}) + void passwordType() { + if (rbPasswordYes.isChecked()) { + editSolid.setPassword(true); + editUnderline.setPassword(true); + editHollow.setPassword(true); + } else { + editSolid.setPassword(false); + editUnderline.setPassword(false); + editHollow.setPassword(false); + } + } + + @OnClick({R.id.rb_cursor_yes, R.id.rb_password_no}) + void cursorShow() { + if (rbCursorYes.isChecked()) { + editSolid.setShowCursor(true); + editUnderline.setShowCursor(true); + editHollow.setShowCursor(true); + } else { + editSolid.setShowCursor(false); + editUnderline.setShowCursor(false); + editHollow.setShowCursor(false); + } + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_code); + ButterKnife.bind(this); + + editSolid.setPassword(true); + editUnderline.setPassword(true); + editHollow.setPassword(true); + + editSolid.setShowCursor(true); + editUnderline.setShowCursor(true); + editHollow.setShowCursor(true); + + editSolid.setTextChangedListener(new CodeEditText.TextChangedListener() { + @Override + public void textChanged(CharSequence changeText) { + + } + + @Override + public void textCompleted(CharSequence text) { + Toast.makeText(CodeActivity.this, "input content:" + text, Toast.LENGTH_SHORT).show(); + } + }); + editUnderline.setTextChangedListener(new CodeEditText.TextChangedListener() { + @Override + public void textChanged(CharSequence changeText) { + + } + + @Override + public void textCompleted(CharSequence text) { + Toast.makeText(CodeActivity.this, "input content:" + text, Toast.LENGTH_SHORT).show(); + } + }); + editHollow.setTextChangedListener(new CodeEditText.TextChangedListener() { + @Override + public void textChanged(CharSequence changeText) { + + } + + @Override + public void textCompleted(CharSequence text) { + Toast.makeText(CodeActivity.this, "input content:" + text, Toast.LENGTH_SHORT).show(); + } + }); + } +} diff --git a/app/src/main/java/org/incoder/uiwidget/code/CodeEditText.java b/app/src/main/java/org/incoder/uiwidget/code/CodeEditText.java new file mode 100644 index 0000000..658fb60 --- /dev/null +++ b/app/src/main/java/org/incoder/uiwidget/code/CodeEditText.java @@ -0,0 +1,451 @@ +package org.incoder.uiwidget.code; + +import android.content.Context; +import android.content.res.TypedArray; +import android.graphics.Canvas; +import android.graphics.Color; +import android.graphics.Paint; +import android.graphics.RectF; +import android.os.Handler; +import android.support.v4.content.ContextCompat; +import android.text.InputFilter; +import android.util.AttributeSet; +import android.view.ActionMode; +import android.view.Menu; +import android.view.MenuItem; +import android.view.inputmethod.InputMethodManager; + +import org.incoder.uiwidget.R; + +import java.util.Timer; +import java.util.TimerTask; +import java.util.concurrent.ScheduledExecutorService; + +/** + * 验证码输入自定义控件 + * + * @author : Jerry xu + * @date : 2019年7月30日 10:33 + */ +public class CodeEditText extends android.support.v7.widget.AppCompatEditText { + + /** + * 空心 + */ + private static final int TYPE_HOLLOW = 1; + /** + * 实心 + */ + private static final int TYPE_SOLID = 2; + /** + * 下划线 + */ + private static final int TYPE_UNDERLINE = 3; + + /** + * 边界画笔 + */ + private Paint borderPaint; + /** + * 实心块画笔 + */ + private Paint blockPaint; + private Paint textPaint; + private Paint cursorPaint; + + private RectF borderRectF; + private RectF boxRectF;//小方块、小矩形 + + /** + * 方框宽,高 + */ + private int boxWidth, boxHeight; + /** + * 方框之间间隙 + */ + private int spacing; + /** + * 方框圆角 + */ + private int corner; + /** + * 验证码最大位数 + */ + private int maxLength; + /** + * 边界粗细 + */ + private int borderWidth; + /** + * 是否是密码类型 + */ + private boolean password; + /** + * 显示光标 + */ + private boolean showCursor; + /** + * 光标闪动间隔 + */ + private int cursorDuration; + /** + * 光标宽度 + */ + private int cursorWidth; + /** + * 光标颜色 + */ + private int cursorColor; + /** + * 实心方式、空心方式 + */ + private int type; + private int borderColor; + private int blockColor; + private int textColor; + + private boolean isCursorShowing; + + private CharSequence contentText; + + private TextChangedListener textChangedListener; + + private Timer timer; + private ScheduledExecutorService mExecutorService; + private TimerTask timerTask; + + public CodeEditText(Context context) { + this(context, null); + } + + public CodeEditText(Context context, AttributeSet attrs) { + this(context, attrs, 0); + } + + public CodeEditText(Context context, AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + + setLongClickable(false); + setTextIsSelectable(false); + setCustomSelectionActionModeCallback(new ActionMode.Callback() { + @Override + public boolean onCreateActionMode(ActionMode actionMode, Menu menu) { + return false; + } + + @Override + public boolean onPrepareActionMode(ActionMode actionMode, Menu menu) { + return false; + } + + @Override + public boolean onActionItemClicked(ActionMode actionMode, MenuItem menuItem) { + return false; + } + + @Override + public void onDestroyActionMode(ActionMode actionMode) { + + } + }); + + TypedArray ta = context.obtainStyledAttributes(attrs, R.styleable.CodeEditText); + + password = ta.getBoolean(R.styleable.CodeEditText_password, false); + showCursor = ta.getBoolean(R.styleable.CodeEditText_showCursor, true); + borderColor = ta.getColor(R.styleable.CodeEditText_borderColor, Color.GRAY); + blockColor = ta.getColor(R.styleable.CodeEditText_blockColor, Color.LTGRAY); + textColor = ta.getColor(R.styleable.CodeEditText_textColor, Color.DKGRAY); + cursorColor = ta.getColor(R.styleable.CodeEditText_cursorColor, ContextCompat.getColor(getContext(), R.color.colorAccent)); + corner = (int) ta.getDimension(R.styleable.CodeEditText_corner, 0); + spacing = (int) ta.getDimension(R.styleable.CodeEditText_blockSpacing, 0); + type = ta.getInt(R.styleable.CodeEditText_separateType, TYPE_HOLLOW); + maxLength = ta.getInt(R.styleable.CodeEditText_maxLength, 6); + cursorDuration = ta.getInt(R.styleable.CodeEditText_cursorDuration, 500); + cursorWidth = (int) ta.getDimension(R.styleable.CodeEditText_cursorWidth, 2); + borderWidth = (int) ta.getDimension(R.styleable.CodeEditText_borderWidth, 2); + ta.recycle(); + init(); + + } + + public void setSpacing(int spacing) { + this.spacing = spacing; + postInvalidate(); + } + + public void setCorner(int corner) { + this.corner = corner; + postInvalidate(); + } + + public void setMaxLength(int maxLength) { + this.maxLength = maxLength; + postInvalidate(); + } + + public void setBorderWidth(int borderWidth) { + this.borderWidth = borderWidth; + postInvalidate(); + } + + public void setPassword(boolean password) { + this.password = password; + postInvalidate(); + } + + public void setShowCursor(boolean showCursor) { + this.showCursor = showCursor; + postInvalidate(); + } + + public void setCursorDuration(int cursorDuration) { + this.cursorDuration = cursorDuration; + postInvalidate(); + } + + public void setCursorWidth(int cursorWidth) { + this.cursorWidth = cursorWidth; + postInvalidate(); + } + + public void setCursorColor(int cursorColor) { + this.cursorColor = cursorColor; + postInvalidate(); + } + + public void setType(int type) { + this.type = type; + postInvalidate(); + } + + public void setBorderColor(int borderColor) { + this.borderColor = borderColor; + postInvalidate(); + } + + public void setBlockColor(int blockColor) { + this.blockColor = blockColor; + postInvalidate(); + } + + public void clearText() { + setText(""); + } + + @Override + public void setTextColor(int textColor) { + this.textColor = textColor; + postInvalidate(); + } + + private void init() { + this.setFocusableInTouchMode(true); + this.setFocusable(true); + this.requestFocus(); + this.setCursorVisible(false); + this.setFilters(new InputFilter[]{new InputFilter.LengthFilter(maxLength)}); + + new Handler().postDelayed(() -> { + InputMethodManager imm = (InputMethodManager) getContext().getSystemService(Context.INPUT_METHOD_SERVICE); + imm.toggleSoftInput(0, InputMethodManager.SHOW_FORCED); + }, 500); + + blockPaint = new Paint(); + blockPaint.setAntiAlias(true); + blockPaint.setColor(blockColor); + blockPaint.setStyle(Paint.Style.FILL); + blockPaint.setStrokeWidth(1); + + // 输入文字绘制 + textPaint = new Paint(); + textPaint.setAntiAlias(true); + textPaint.setColor(textColor); + textPaint.setStyle(Paint.Style.FILL_AND_STROKE); + textPaint.setStrokeWidth(1); + + // 边框绘制 + borderPaint = new Paint(); + borderPaint.setAntiAlias(true); + borderPaint.setColor(borderColor); + borderPaint.setStyle(Paint.Style.STROKE); + borderPaint.setStrokeWidth(borderWidth); + + // 光标绘制 + cursorPaint = new Paint(); + cursorPaint.setAntiAlias(true); + cursorPaint.setColor(cursorColor); + cursorPaint.setStyle(Paint.Style.FILL_AND_STROKE); + cursorPaint.setStrokeWidth(cursorWidth); + + borderRectF = new RectF(); + boxRectF = new RectF(); + + if (type == TYPE_HOLLOW) { + spacing = 0; + } + + timerTask = new TimerTask() { + @Override + public void run() { + isCursorShowing = !isCursorShowing; + postInvalidate(); + } + }; + timer = new Timer(); + } + + @Override + protected void onSizeChanged(int w, int h, int oldw, int oldh) { + super.onSizeChanged(w, h, oldw, oldh); + boxWidth = (w - spacing * (maxLength + 1)) / maxLength; + boxHeight = h; + borderRectF.set(0, 0, w, h); + textPaint.setTextSize(boxWidth / 2); + } + + @Override + protected void onDraw(Canvas canvas) { + drawRect(canvas); + drawText(canvas, contentText); + drawCursor(canvas); + } + + /** + * 绘制矩形 + * + * @param canvas canvas + */ + private void drawRect(Canvas canvas) { + for (int i = 0; i < maxLength; i++) { + + boxRectF.set(spacing * (i + 1) + boxWidth * i, 0, + spacing * (i + 1) + boxWidth * i + boxWidth, boxHeight); + + if (type == TYPE_SOLID) { + canvas.drawRoundRect(boxRectF, corner, corner, blockPaint); + } else if (type == TYPE_UNDERLINE) { + canvas.drawLine(boxRectF.left, boxRectF.bottom, boxRectF.right, boxRectF.bottom, borderPaint); + } else if (type == TYPE_HOLLOW) { + if (i == 0 || i == maxLength) { + continue; + } + canvas.drawLine(boxRectF.left, boxRectF.top, boxRectF.left, boxRectF.bottom, borderPaint); + } + } + // 绘制圆角矩形 + if (type == TYPE_HOLLOW) { + canvas.drawRoundRect(borderRectF, corner, corner, borderPaint); + } + } + + /** + * 绘制文字 + * + * @param canvas canvas + * @param charSequence charSequence + */ + private void drawText(Canvas canvas, CharSequence charSequence) { + for (int i = 0; i < charSequence.length(); i++) { + int startX = spacing * (i + 1) + boxWidth * i; + int startY = 0; + int baseX = (int) (startX + boxWidth / 2 - textPaint.measureText(String.valueOf(charSequence.charAt(i))) / 2); + int baseY = (int) (startY + boxHeight / 2 - (textPaint.descent() + textPaint.ascent()) / 2); + int centerX = startX + boxWidth / 2; + int centerY = startY + boxHeight / 2; + int radius = Math.min(boxWidth, boxHeight) / 6; + if (password) { + canvas.drawCircle(centerX, centerY, radius, textPaint); + } else { + canvas.drawText(String.valueOf(charSequence.charAt(i)), baseX, baseY, textPaint); + } + } + } + + /** + * 绘制光标 + * + * @param canvas canvas + */ + private void drawCursor(Canvas canvas) { + if (!isCursorShowing && showCursor && contentText.length() < maxLength && hasFocus()) { + int cursorPosition = contentText.length() + 1; + int startX = spacing * cursorPosition + boxWidth * (cursorPosition - 1) + boxWidth / 2; + int startY = boxHeight / 4; + int endX = startX; + int endY = boxHeight - boxHeight / 4; + canvas.drawLine(startX, startY, endX, endY, cursorPaint); + } + } + + @Override + protected void onTextChanged(CharSequence text, int start, int lengthBefore, int lengthAfter) { + super.onTextChanged(text, start, lengthBefore, lengthAfter); + contentText = text; + invalidate(); + + if (textChangedListener != null) { + if (text.length() == maxLength) { + textChangedListener.textCompleted(text); + } else { + textChangedListener.textChanged(text); + } + } + } + + @Override + protected void onAttachedToWindow() { + super.onAttachedToWindow(); + // cursorFlashTime为光标闪动的间隔时间 + timer.scheduleAtFixedRate(timerTask, 0, cursorDuration); + } + + @Override + protected void onDetachedFromWindow() { + super.onDetachedFromWindow(); + timer.cancel(); + } + + @Override + public boolean onTextContextMenuItem(int id) { + return true; + } + + @Override + protected void onSelectionChanged(int selStart, int selEnd) { + CharSequence text = getText(); + if (text != null) { + if (selStart != text.length() || selEnd != text.length()) { + setSelection(text.length(), text.length()); + return; + } + } + super.onSelectionChanged(selStart, selEnd); + } + + + public void setTextChangedListener(TextChangedListener listener) { + textChangedListener = listener; + } + + /** + * 密码监听者 + */ + public interface TextChangedListener { + + /** + * 输入/删除监听 + * + * @param changeText 输入/删除的字符 + */ + void textChanged(CharSequence changeText); + + /** + * 输入完成 + * + * @param text 输入的字符 + */ + void textCompleted(CharSequence text); + } + +} diff --git a/app/src/main/java/org/incoder/uiwidget/containers/AppBarLayoutFragment.java b/app/src/main/java/org/incoder/uiwidget/containers/AppBarLayoutFragment.java new file mode 100644 index 0000000..6d94807 --- /dev/null +++ b/app/src/main/java/org/incoder/uiwidget/containers/AppBarLayoutFragment.java @@ -0,0 +1,34 @@ +package org.incoder.uiwidget.containers; + + +import android.os.Bundle; +import android.support.annotation.NonNull; +import android.support.v4.app.Fragment; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import org.incoder.uiwidget.R; + +/** + * AppBarLayoutFragment + * + * @author Jerry xu + * @date 4/6/2018 8:00 AM. + */ +public class AppBarLayoutFragment extends Fragment { + + + public AppBarLayoutFragment() { + // Required empty public constructor + } + + + @Override + public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + // Inflate the layout for this fragment + return inflater.inflate(R.layout.fragment_app_bar_layout, container, false); + } + +} diff --git a/app/src/main/java/org/incoder/uiwidget/containers/BottomNavigationFragment.java b/app/src/main/java/org/incoder/uiwidget/containers/BottomNavigationFragment.java new file mode 100644 index 0000000..4150db7 --- /dev/null +++ b/app/src/main/java/org/incoder/uiwidget/containers/BottomNavigationFragment.java @@ -0,0 +1,34 @@ +package org.incoder.uiwidget.containers; + + +import android.os.Bundle; +import android.support.annotation.NonNull; +import android.support.v4.app.Fragment; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import org.incoder.uiwidget.R; + +/** + * BottomNavigationFragment + * + * @author Jerry xu + * @date 4/6/2018 8:00 AM. + */ +public class BottomNavigationFragment extends Fragment { + + + public BottomNavigationFragment() { + // Required empty public constructor + } + + + @Override + public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + // Inflate the layout for this fragment + return inflater.inflate(R.layout.fragment_bottom_navigation, container, false); + } + +} diff --git a/app/src/main/java/org/incoder/uiwidget/containers/CardViewFragment.java b/app/src/main/java/org/incoder/uiwidget/containers/CardViewFragment.java new file mode 100644 index 0000000..ff4158c --- /dev/null +++ b/app/src/main/java/org/incoder/uiwidget/containers/CardViewFragment.java @@ -0,0 +1,30 @@ +package org.incoder.uiwidget.containers; + + +import android.os.Bundle; +import android.support.v4.app.Fragment; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import org.incoder.uiwidget.R; + +/** + * A simple {@link Fragment} subclass. + */ +public class CardViewFragment extends Fragment { + + + public CardViewFragment() { + // Required empty public constructor + } + + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + // Inflate the layout for this fragment + return inflater.inflate(R.layout.fragment_card_view, container, false); + } + +} diff --git a/app/src/main/java/org/incoder/uiwidget/containers/IncludeFragment.java b/app/src/main/java/org/incoder/uiwidget/containers/IncludeFragment.java new file mode 100644 index 0000000..f4b4661 --- /dev/null +++ b/app/src/main/java/org/incoder/uiwidget/containers/IncludeFragment.java @@ -0,0 +1,34 @@ +package org.incoder.uiwidget.containers; + + +import android.os.Bundle; +import android.support.annotation.NonNull; +import android.support.v4.app.Fragment; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import org.incoder.uiwidget.R; + +/** + * IncludeFragment + * + * @author Jerry xu + * @date 4/6/2018 8:00 AM. + */ +public class IncludeFragment extends Fragment { + + + public IncludeFragment() { + // Required empty public constructor + } + + + @Override + public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + // Inflate the layout for this fragment + return inflater.inflate(R.layout.fragment_include, container, false); + } + +} diff --git a/app/src/main/java/org/incoder/uiwidget/containers/NavigationViewFragment.java b/app/src/main/java/org/incoder/uiwidget/containers/NavigationViewFragment.java new file mode 100644 index 0000000..ae6ac2c --- /dev/null +++ b/app/src/main/java/org/incoder/uiwidget/containers/NavigationViewFragment.java @@ -0,0 +1,34 @@ +package org.incoder.uiwidget.containers; + + +import android.os.Bundle; +import android.support.annotation.NonNull; +import android.support.v4.app.Fragment; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import org.incoder.uiwidget.R; + +/** + * NavigationViewFragment + * + * @author Jerry xu + * @date 4/6/2018 8:00 AM. + */ +public class NavigationViewFragment extends Fragment { + + + public NavigationViewFragment() { + // Required empty public constructor + } + + + @Override + public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + // Inflate the layout for this fragment + return inflater.inflate(R.layout.fragment_navigation_view, container, false); + } + +} diff --git a/app/src/main/java/org/incoder/uiwidget/containers/RecyclerViewFragment.java b/app/src/main/java/org/incoder/uiwidget/containers/RecyclerViewFragment.java new file mode 100644 index 0000000..2a7bde6 --- /dev/null +++ b/app/src/main/java/org/incoder/uiwidget/containers/RecyclerViewFragment.java @@ -0,0 +1,34 @@ +package org.incoder.uiwidget.containers; + + +import android.os.Bundle; +import android.support.annotation.NonNull; +import android.support.v4.app.Fragment; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import org.incoder.uiwidget.R; + +/** + * RecyclerViewFragment + * + * @author Jerry xu + * @date 4/6/2018 8:00 AM. + */ +public class RecyclerViewFragment extends Fragment { + + + public RecyclerViewFragment() { + // Required empty public constructor + } + + + @Override + public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + // Inflate the layout for this fragment + return inflater.inflate(R.layout.fragment_recycler_view, container, false); + } + +} diff --git a/app/src/main/java/org/incoder/uiwidget/containers/RequestFocusFragment.java b/app/src/main/java/org/incoder/uiwidget/containers/RequestFocusFragment.java new file mode 100644 index 0000000..3eb2628 --- /dev/null +++ b/app/src/main/java/org/incoder/uiwidget/containers/RequestFocusFragment.java @@ -0,0 +1,34 @@ +package org.incoder.uiwidget.containers; + + +import android.os.Bundle; +import android.support.annotation.NonNull; +import android.support.v4.app.Fragment; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import org.incoder.uiwidget.R; + +/** + * RequestFocusFragment + * + * @author Jerry xu + * @date 4/6/2018 8:00 AM. + */ +public class RequestFocusFragment extends Fragment { + + + public RequestFocusFragment() { + // Required empty public constructor + } + + + @Override + public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + // Inflate the layout for this fragment + return inflater.inflate(R.layout.fragment_request_focus, container, false); + } + +} diff --git a/app/src/main/java/org/incoder/uiwidget/containers/ScrollViewFragment.java b/app/src/main/java/org/incoder/uiwidget/containers/ScrollViewFragment.java new file mode 100644 index 0000000..54e79e9 --- /dev/null +++ b/app/src/main/java/org/incoder/uiwidget/containers/ScrollViewFragment.java @@ -0,0 +1,34 @@ +package org.incoder.uiwidget.containers; + + +import android.os.Bundle; +import android.support.annotation.NonNull; +import android.support.v4.app.Fragment; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import org.incoder.uiwidget.R; + +/** + * ScrollViewFragment + * + * @author Jerry xu + * @date 4/6/2018 8:00 AM. + */ +public class ScrollViewFragment extends Fragment { + + + public ScrollViewFragment() { + // Required empty public constructor + } + + + @Override + public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + // Inflate the layout for this fragment + return inflater.inflate(R.layout.fragment_scroll_view, container, false); + } + +} diff --git a/app/src/main/java/org/incoder/uiwidget/containers/SpinnerFragment.java b/app/src/main/java/org/incoder/uiwidget/containers/SpinnerFragment.java new file mode 100644 index 0000000..9f6f564 --- /dev/null +++ b/app/src/main/java/org/incoder/uiwidget/containers/SpinnerFragment.java @@ -0,0 +1,34 @@ +package org.incoder.uiwidget.containers; + + +import android.os.Bundle; +import android.support.annotation.NonNull; +import android.support.v4.app.Fragment; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import org.incoder.uiwidget.R; + +/** + * SpinnerFragment + * + * @author Jerry xu + * @date 4/6/2018 8:00 AM. + */ +public class SpinnerFragment extends Fragment { + + + public SpinnerFragment() { + // Required empty public constructor + } + + + @Override + public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + // Inflate the layout for this fragment + return inflater.inflate(R.layout.fragment_spinner, container, false); + } + +} diff --git a/app/src/main/java/org/incoder/uiwidget/containers/TabLayoutFragment.java b/app/src/main/java/org/incoder/uiwidget/containers/TabLayoutFragment.java new file mode 100644 index 0000000..c27ed49 --- /dev/null +++ b/app/src/main/java/org/incoder/uiwidget/containers/TabLayoutFragment.java @@ -0,0 +1,34 @@ +package org.incoder.uiwidget.containers; + + +import android.os.Bundle; +import android.support.annotation.NonNull; +import android.support.v4.app.Fragment; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import org.incoder.uiwidget.R; + +/** + * TabLayoutFragment + * + * @author Jerry xu + * @date 4/6/2018 8:00 AM. + */ +public class TabLayoutFragment extends Fragment { + + + public TabLayoutFragment() { + // Required empty public constructor + } + + + @Override + public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + // Inflate the layout for this fragment + return inflater.inflate(R.layout.fragment_tab_layout, container, false); + } + +} diff --git a/app/src/main/java/org/incoder/uiwidget/containers/TabsFragment.java b/app/src/main/java/org/incoder/uiwidget/containers/TabsFragment.java new file mode 100644 index 0000000..928fcc4 --- /dev/null +++ b/app/src/main/java/org/incoder/uiwidget/containers/TabsFragment.java @@ -0,0 +1,34 @@ +package org.incoder.uiwidget.containers; + + +import android.os.Bundle; +import android.support.annotation.NonNull; +import android.support.v4.app.Fragment; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import org.incoder.uiwidget.R; + +/** + * TabsFragment + * + * @author Jerry xu + * @date 4/6/2018 8:00 AM. + */ +public class TabsFragment extends Fragment { + + + public TabsFragment() { + // Required empty public constructor + } + + + @Override + public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + // Inflate the layout for this fragment + return inflater.inflate(R.layout.fragment_tabs, container, false); + } + +} diff --git a/app/src/main/java/org/incoder/uiwidget/containers/ToolbarFragment.java b/app/src/main/java/org/incoder/uiwidget/containers/ToolbarFragment.java new file mode 100644 index 0000000..a51c782 --- /dev/null +++ b/app/src/main/java/org/incoder/uiwidget/containers/ToolbarFragment.java @@ -0,0 +1,34 @@ +package org.incoder.uiwidget.containers; + + +import android.os.Bundle; +import android.support.annotation.NonNull; +import android.support.v4.app.Fragment; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import org.incoder.uiwidget.R; + +/** + * ToolbarFragment + * + * @author Jerry xu + * @date 4/6/2018 8:00 AM. + */ +public class ToolbarFragment extends Fragment { + + + public ToolbarFragment() { + // Required empty public constructor + } + + + @Override + public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + // Inflate the layout for this fragment + return inflater.inflate(R.layout.fragment_toolbar, container, false); + } + +} diff --git a/app/src/main/java/org/incoder/uiwidget/containers/ViewFragment.java b/app/src/main/java/org/incoder/uiwidget/containers/ViewFragment.java new file mode 100644 index 0000000..c030124 --- /dev/null +++ b/app/src/main/java/org/incoder/uiwidget/containers/ViewFragment.java @@ -0,0 +1,34 @@ +package org.incoder.uiwidget.containers; + + +import android.os.Bundle; +import android.support.annotation.NonNull; +import android.support.v4.app.Fragment; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import org.incoder.uiwidget.R; + +/** + * ViewFragment + * + * @author Jerry xu + * @date 4/6/2018 8:00 AM. + */ +public class ViewFragment extends Fragment { + + + public ViewFragment() { + // Required empty public constructor + } + + + @Override + public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + // Inflate the layout for this fragment + return inflater.inflate(R.layout.fragment_view, container, false); + } + +} diff --git a/app/src/main/java/org/incoder/uiwidget/containers/ViewPagerFragment.java b/app/src/main/java/org/incoder/uiwidget/containers/ViewPagerFragment.java new file mode 100644 index 0000000..6c8c127 --- /dev/null +++ b/app/src/main/java/org/incoder/uiwidget/containers/ViewPagerFragment.java @@ -0,0 +1,34 @@ +package org.incoder.uiwidget.containers; + + +import android.os.Bundle; +import android.support.annotation.NonNull; +import android.support.v4.app.Fragment; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import org.incoder.uiwidget.R; + +/** + * ViewPagerFragment + * + * @author Jerry xu + * @date 4/6/2018 8:00 AM. + */ +public class ViewPagerFragment extends Fragment { + + + public ViewPagerFragment() { + // Required empty public constructor + } + + + @Override + public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + // Inflate the layout for this fragment + return inflater.inflate(R.layout.fragment_view_pager, container, false); + } + +} diff --git a/app/src/main/java/org/incoder/uiwidget/containers/ViewStubFragment.java b/app/src/main/java/org/incoder/uiwidget/containers/ViewStubFragment.java new file mode 100644 index 0000000..aeb4458 --- /dev/null +++ b/app/src/main/java/org/incoder/uiwidget/containers/ViewStubFragment.java @@ -0,0 +1,34 @@ +package org.incoder.uiwidget.containers; + + +import android.os.Bundle; +import android.support.annotation.NonNull; +import android.support.v4.app.Fragment; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import org.incoder.uiwidget.R; + +/** + * ViewStubFragment + * + * @author Jerry xu + * @date 4/6/2018 8:00 AM. + */ +public class ViewStubFragment extends Fragment { + + + public ViewStubFragment() { + // Required empty public constructor + } + + + @Override + public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + // Inflate the layout for this fragment + return inflater.inflate(R.layout.fragment_view_stub, container, false); + } + +} diff --git a/app/src/main/java/org/incoder/uiwidget/containers/fragmentFragment.java b/app/src/main/java/org/incoder/uiwidget/containers/fragmentFragment.java new file mode 100644 index 0000000..2e8981f --- /dev/null +++ b/app/src/main/java/org/incoder/uiwidget/containers/fragmentFragment.java @@ -0,0 +1,34 @@ +package org.incoder.uiwidget.containers; + + +import android.os.Bundle; +import android.support.annotation.NonNull; +import android.support.v4.app.Fragment; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import org.incoder.uiwidget.R; + +/** + * fragmentFragment + * + * @author Jerry xu + * @date 4/6/2018 8:00 AM. + */ +public class fragmentFragment extends Fragment { + + + public fragmentFragment() { + // Required empty public constructor + } + + + @Override + public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + // Inflate the layout for this fragment + return inflater.inflate(R.layout.fragment_fragment, container, false); + } + +} diff --git a/app/src/main/java/org/incoder/uiwidget/google/AdViewFragment.java b/app/src/main/java/org/incoder/uiwidget/google/AdViewFragment.java new file mode 100644 index 0000000..9bda3ca --- /dev/null +++ b/app/src/main/java/org/incoder/uiwidget/google/AdViewFragment.java @@ -0,0 +1,34 @@ +package org.incoder.uiwidget.google; + + +import android.os.Bundle; +import android.support.annotation.NonNull; +import android.support.v4.app.Fragment; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import org.incoder.uiwidget.R; + +/** + * AdViewFragment + * + * @author Jerry xu + * @date 4/6/2018 8:00 AM. + */ +public class AdViewFragment extends Fragment { + + + public AdViewFragment() { + // Required empty public constructor + } + + + @Override + public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + // Inflate the layout for this fragment + return inflater.inflate(R.layout.fragment_ad_view, container, false); + } + +} diff --git a/app/src/main/java/org/incoder/uiwidget/google/MapViewFragment.java b/app/src/main/java/org/incoder/uiwidget/google/MapViewFragment.java new file mode 100644 index 0000000..273a93b --- /dev/null +++ b/app/src/main/java/org/incoder/uiwidget/google/MapViewFragment.java @@ -0,0 +1,34 @@ +package org.incoder.uiwidget.google; + + +import android.os.Bundle; +import android.support.annotation.NonNull; +import android.support.v4.app.Fragment; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import org.incoder.uiwidget.R; + +/** + * MapViewFragment + * + * @author Jerry xu + * @date 4/6/2018 8:00 AM. + */ +public class MapViewFragment extends Fragment { + + + public MapViewFragment() { + // Required empty public constructor + } + + + @Override + public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + // Inflate the layout for this fragment + return inflater.inflate(R.layout.fragment_map_view, container, false); + } + +} diff --git a/app/src/main/java/org/incoder/uiwidget/layout/ConstraintLayoutFragment.java b/app/src/main/java/org/incoder/uiwidget/layout/ConstraintLayoutFragment.java new file mode 100644 index 0000000..fc5bc68 --- /dev/null +++ b/app/src/main/java/org/incoder/uiwidget/layout/ConstraintLayoutFragment.java @@ -0,0 +1,34 @@ +package org.incoder.uiwidget.layout; + + +import android.os.Bundle; +import android.support.annotation.NonNull; +import android.support.v4.app.Fragment; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import org.incoder.uiwidget.R; + +/** + * ConstraintLayoutFragment + * + * @author Jerry xu + * @date 4/6/2018 8:00 AM. + */ +public class ConstraintLayoutFragment extends Fragment { + + + public ConstraintLayoutFragment() { + // Required empty public constructor + } + + + @Override + public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + // Inflate the layout for this fragment + return inflater.inflate(R.layout.fragment_constraint_layout, container, false); + } + +} diff --git a/app/src/main/java/org/incoder/uiwidget/layout/FrameLayoutFragment.java b/app/src/main/java/org/incoder/uiwidget/layout/FrameLayoutFragment.java new file mode 100644 index 0000000..ab6181d --- /dev/null +++ b/app/src/main/java/org/incoder/uiwidget/layout/FrameLayoutFragment.java @@ -0,0 +1,34 @@ +package org.incoder.uiwidget.layout; + + +import android.os.Bundle; +import android.support.annotation.NonNull; +import android.support.v4.app.Fragment; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import org.incoder.uiwidget.R; + +/** + * FrameLayoutFragment + * + * @author Jerry xu + * @date 4/6/2018 8:00 AM. + */ +public class FrameLayoutFragment extends Fragment { + + + public FrameLayoutFragment() { + // Required empty public constructor + } + + + @Override + public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + // Inflate the layout for this fragment + return inflater.inflate(R.layout.fragment_frame_layout, container, false); + } + +} diff --git a/app/src/main/java/org/incoder/uiwidget/layout/GuidelineFragment.java b/app/src/main/java/org/incoder/uiwidget/layout/GuidelineFragment.java new file mode 100644 index 0000000..03102b0 --- /dev/null +++ b/app/src/main/java/org/incoder/uiwidget/layout/GuidelineFragment.java @@ -0,0 +1,34 @@ +package org.incoder.uiwidget.layout; + + +import android.os.Bundle; +import android.support.annotation.NonNull; +import android.support.v4.app.Fragment; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import org.incoder.uiwidget.R; + +/** + * GuidelineFragment + * + * @author Jerry xu + * @date 4/6/2018 8:00 AM. + */ +public class GuidelineFragment extends Fragment { + + + public GuidelineFragment() { + // Required empty public constructor + } + + + @Override + public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + // Inflate the layout for this fragment + return inflater.inflate(R.layout.fragment_guideline, container, false); + } + +} diff --git a/app/src/main/java/org/incoder/uiwidget/layout/LinearLayoutFragment.java b/app/src/main/java/org/incoder/uiwidget/layout/LinearLayoutFragment.java new file mode 100644 index 0000000..5980785 --- /dev/null +++ b/app/src/main/java/org/incoder/uiwidget/layout/LinearLayoutFragment.java @@ -0,0 +1,34 @@ +package org.incoder.uiwidget.layout; + + +import android.os.Bundle; +import android.support.annotation.NonNull; +import android.support.v4.app.Fragment; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import org.incoder.uiwidget.R; + +/** + * LinearLayoutFragment + * + * @author Jerry xu + * @date 4/6/2018 8:00 AM. + */ +public class LinearLayoutFragment extends Fragment { + + + public LinearLayoutFragment() { + // Required empty public constructor + } + + + @Override + public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + // Inflate the layout for this fragment + return inflater.inflate(R.layout.fragment_linear_layout, container, false); + } + +} diff --git a/app/src/main/java/org/incoder/uiwidget/layout/SpaceFragment.java b/app/src/main/java/org/incoder/uiwidget/layout/SpaceFragment.java new file mode 100644 index 0000000..accbad0 --- /dev/null +++ b/app/src/main/java/org/incoder/uiwidget/layout/SpaceFragment.java @@ -0,0 +1,34 @@ +package org.incoder.uiwidget.layout; + + +import android.os.Bundle; +import android.support.annotation.NonNull; +import android.support.v4.app.Fragment; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import org.incoder.uiwidget.R; + +/** + * SpaceFragment + * + * @author Jerry xu + * @date 4/6/2018 8:00 AM. + */ +public class SpaceFragment extends Fragment { + + + public SpaceFragment() { + // Required empty public constructor + } + + + @Override + public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + // Inflate the layout for this fragment + return inflater.inflate(R.layout.fragment_space, container, false); + } + +} diff --git a/app/src/main/java/org/incoder/uiwidget/layout/TableLayoutFragment.java b/app/src/main/java/org/incoder/uiwidget/layout/TableLayoutFragment.java new file mode 100644 index 0000000..5f35cea --- /dev/null +++ b/app/src/main/java/org/incoder/uiwidget/layout/TableLayoutFragment.java @@ -0,0 +1,34 @@ +package org.incoder.uiwidget.layout; + + +import android.os.Bundle; +import android.support.annotation.NonNull; +import android.support.v4.app.Fragment; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import org.incoder.uiwidget.R; + +/** + * TableLayoutFragment + * + * @author Jerry xu + * @date 4/6/2018 8:00 AM. + */ +public class TableLayoutFragment extends Fragment { + + + public TableLayoutFragment() { + // Required empty public constructor + } + + + @Override + public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + // Inflate the layout for this fragment + return inflater.inflate(R.layout.fragment_table_layout, container, false); + } + +} diff --git a/app/src/main/java/org/incoder/uiwidget/layout/TableRowFragment.java b/app/src/main/java/org/incoder/uiwidget/layout/TableRowFragment.java new file mode 100644 index 0000000..c02f1d7 --- /dev/null +++ b/app/src/main/java/org/incoder/uiwidget/layout/TableRowFragment.java @@ -0,0 +1,34 @@ +package org.incoder.uiwidget.layout; + + +import android.os.Bundle; +import android.support.annotation.NonNull; +import android.support.v4.app.Fragment; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import org.incoder.uiwidget.R; + +/** + * TableRowFragment + * + * @author Jerry xu + * @date 4/6/2018 8:00 AM. + */ +public class TableRowFragment extends Fragment { + + + public TableRowFragment() { + // Required empty public constructor + } + + + @Override + public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + // Inflate the layout for this fragment + return inflater.inflate(R.layout.fragment_table_row, container, false); + } + +} diff --git a/app/src/main/java/org/incoder/uiwidget/legacy/GridLayoutFragment.java b/app/src/main/java/org/incoder/uiwidget/legacy/GridLayoutFragment.java new file mode 100644 index 0000000..91d248a --- /dev/null +++ b/app/src/main/java/org/incoder/uiwidget/legacy/GridLayoutFragment.java @@ -0,0 +1,34 @@ +package org.incoder.uiwidget.legacy; + + +import android.os.Bundle; +import android.support.annotation.NonNull; +import android.support.v4.app.Fragment; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import org.incoder.uiwidget.R; + +/** + * GridLayoutFragment + * + * @author Jerry xu + * @date 4/6/2018 8:00 AM. + */ +public class GridLayoutFragment extends Fragment { + + + public GridLayoutFragment() { + // Required empty public constructor + } + + + @Override + public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + // Inflate the layout for this fragment + return inflater.inflate(R.layout.fragment_grid_layout, container, false); + } + +} diff --git a/app/src/main/java/org/incoder/uiwidget/legacy/GridViewFragment.java b/app/src/main/java/org/incoder/uiwidget/legacy/GridViewFragment.java new file mode 100644 index 0000000..e2c1a36 --- /dev/null +++ b/app/src/main/java/org/incoder/uiwidget/legacy/GridViewFragment.java @@ -0,0 +1,34 @@ +package org.incoder.uiwidget.legacy; + + +import android.os.Bundle; +import android.support.annotation.NonNull; +import android.support.v4.app.Fragment; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import org.incoder.uiwidget.R; + +/** + * GridViewFragment + * + * @author Jerry xu + * @date 4/6/2018 8:00 AM. + */ +public class GridViewFragment extends Fragment { + + + public GridViewFragment() { + // Required empty public constructor + } + + + @Override + public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + // Inflate the layout for this fragment + return inflater.inflate(R.layout.fragment_grid_view, container, false); + } + +} diff --git a/app/src/main/java/org/incoder/uiwidget/legacy/ListViewFragment.java b/app/src/main/java/org/incoder/uiwidget/legacy/ListViewFragment.java new file mode 100644 index 0000000..ea6e6c4 --- /dev/null +++ b/app/src/main/java/org/incoder/uiwidget/legacy/ListViewFragment.java @@ -0,0 +1,34 @@ +package org.incoder.uiwidget.legacy; + + +import android.os.Bundle; +import android.support.annotation.NonNull; +import android.support.v4.app.Fragment; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import org.incoder.uiwidget.R; + +/** + * ListViewFragment + * + * @author Jerry xu + * @date 4/6/2018 8:00 AM. + */ +public class ListViewFragment extends Fragment { + + + public ListViewFragment() { + // Required empty public constructor + } + + + @Override + public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + // Inflate the layout for this fragment + return inflater.inflate(R.layout.fragment_list_view, container, false); + } + +} diff --git a/app/src/main/java/org/incoder/uiwidget/legacy/RelativeLayoutFragment.java b/app/src/main/java/org/incoder/uiwidget/legacy/RelativeLayoutFragment.java new file mode 100644 index 0000000..69ca8f7 --- /dev/null +++ b/app/src/main/java/org/incoder/uiwidget/legacy/RelativeLayoutFragment.java @@ -0,0 +1,34 @@ +package org.incoder.uiwidget.legacy; + + +import android.os.Bundle; +import android.support.annotation.NonNull; +import android.support.v4.app.Fragment; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import org.incoder.uiwidget.R; + +/** + * RelativeLayoutFragment + * + * @author Jerry xu + * @date 4/6/2018 8:00 AM. + */ +public class RelativeLayoutFragment extends Fragment { + + + public RelativeLayoutFragment() { + // Required empty public constructor + } + + + @Override + public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + // Inflate the layout for this fragment + return inflater.inflate(R.layout.fragment_relative_layout, container, false); + } + +} diff --git a/app/src/main/java/org/incoder/uiwidget/legacy/TabHostFragment.java b/app/src/main/java/org/incoder/uiwidget/legacy/TabHostFragment.java new file mode 100644 index 0000000..c29cbbd --- /dev/null +++ b/app/src/main/java/org/incoder/uiwidget/legacy/TabHostFragment.java @@ -0,0 +1,34 @@ +package org.incoder.uiwidget.legacy; + + +import android.os.Bundle; +import android.support.annotation.NonNull; +import android.support.v4.app.Fragment; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import org.incoder.uiwidget.R; + +/** + * TabHostFragment + * + * @author Jerry xu + * @date 4/6/2018 8:00 AM. + */ +public class TabHostFragment extends Fragment { + + + public TabHostFragment() { + // Required empty public constructor + } + + + @Override + public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + // Inflate the layout for this fragment + return inflater.inflate(R.layout.fragment_tab_host, container, false); + } + +} diff --git a/app/src/main/java/org/incoder/uiwidget/sheet/BottomSheetFragment.java b/app/src/main/java/org/incoder/uiwidget/sheet/BottomSheetFragment.java new file mode 100644 index 0000000..9ed91cb --- /dev/null +++ b/app/src/main/java/org/incoder/uiwidget/sheet/BottomSheetFragment.java @@ -0,0 +1,144 @@ +/* + * Copyright (C) 2018 The Jerry xu Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.incoder.uiwidget.sheet; + +import android.content.Context; +import android.os.Bundle; +import android.support.annotation.NonNull; +import android.support.annotation.Nullable; +import android.support.design.widget.BottomSheetDialogFragment; +import android.support.v4.app.DialogFragment; +import android.support.v4.app.Fragment; +import android.support.v7.widget.LinearLayoutManager; +import android.support.v7.widget.RecyclerView; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import org.incoder.uiwidget.R; + +/** + *

A fragment that shows a list of items as a modal bottom sheet.

+ *

You can show this modal bottom sheet from your activity like this:

+ *
+ * BottomSheetFragment.newInstance(30).show(getSupportFragmentManager(), "dialog");
+ * 
+ *

You activity (or fragment) needs to implement {@link BottomSheetFragment.Listener}.

+ *

+ * + * @author Jerry xu + * @date 8/1/2019 1:00 AM. + */ +public class BottomSheetFragment extends BottomSheetDialogFragment { + + private static final String ARG_ITEM_COUNT = "item_count"; + private Listener mListener; + + public static BottomSheetFragment newInstance(int itemCount) { + final BottomSheetFragment fragment = new BottomSheetFragment(); + final Bundle args = new Bundle(); + args.putInt(ARG_ITEM_COUNT, itemCount); + fragment.setArguments(args); + fragment.setStyle(DialogFragment.STYLE_NO_TITLE, R.style.BottomSheetDialogTheme); + return fragment; + } + + @Nullable + @Override + public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, + @Nullable Bundle savedInstanceState) { + return inflater.inflate(R.layout.fragment_bottom_sheet, container, false); + } + + @Override + public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { + final RecyclerView recyclerView = (RecyclerView) view; + recyclerView.setLayoutManager(new LinearLayoutManager(getContext())); + if (getArguments() != null) { + recyclerView.setAdapter(new ItemAdapter(getArguments().getInt(ARG_ITEM_COUNT))); + } + } + + @Override + public void onAttach(Context context) { + super.onAttach(context); + final Fragment parent = getParentFragment(); + if (parent != null) { + mListener = (Listener) parent; + } else { + mListener = (Listener) context; + } + } + + @Override + public void onDetach() { + mListener = null; + super.onDetach(); + } + + public interface Listener { + void onItemClicked(int position); + } + + private class ViewHolder extends RecyclerView.ViewHolder { + + final TextView text; + + ViewHolder(LayoutInflater inflater, ViewGroup parent) { + super(inflater.inflate(R.layout.fragment_item_list_dialog_item, parent, false)); + text = itemView.findViewById(R.id.text); + text.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (mListener != null) { + mListener.onItemClicked(getAdapterPosition()); + dismiss(); + } + } + }); + } + + } + + private class ItemAdapter extends RecyclerView.Adapter { + + private final int mItemCount; + + ItemAdapter(int itemCount) { + mItemCount = itemCount; + } + + @NonNull + @Override + public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + return new ViewHolder(LayoutInflater.from(parent.getContext()), parent); + } + + @Override + public void onBindViewHolder(@NonNull ViewHolder holder, int position) { + holder.text.setText(String.valueOf(position)); + } + + @Override + public int getItemCount() { + return mItemCount; + } + + } + +} diff --git a/app/src/main/java/org/incoder/uiwidget/sheet/SheetActivity.java b/app/src/main/java/org/incoder/uiwidget/sheet/SheetActivity.java new file mode 100644 index 0000000..21f937d --- /dev/null +++ b/app/src/main/java/org/incoder/uiwidget/sheet/SheetActivity.java @@ -0,0 +1,56 @@ +/* + * Copyright (C) 2018 The Jerry xu Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.incoder.uiwidget.sheet; + +import android.os.Bundle; +import android.support.v7.app.AppCompatActivity; +import android.widget.Button; + +import org.incoder.uiwidget.R; + +import butterknife.BindView; +import butterknife.ButterKnife; +import butterknife.OnClick; + +/** + * SheetActivity + * + * @author Jerry xu + * @date 8/1/2019 1:00 AM. + */ +public class SheetActivity extends AppCompatActivity implements BottomSheetFragment.Listener { + + @BindView(R.id.btn_open) + Button mOpen; + + @OnClick(R.id.btn_open) + void openSheets() { + BottomSheetFragment.newInstance(30).show(getSupportFragmentManager(), "dialog"); + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_sheet); + ButterKnife.bind(this); + } + + @Override + public void onItemClicked(int position) { + + } +} diff --git a/app/src/main/java/org/incoder/uiwidget/statusbar/GradientFragment.java b/app/src/main/java/org/incoder/uiwidget/statusbar/GradientFragment.java new file mode 100644 index 0000000..cc23bee --- /dev/null +++ b/app/src/main/java/org/incoder/uiwidget/statusbar/GradientFragment.java @@ -0,0 +1,127 @@ +/* + * Copyright (C) 2018 The Jerry xu Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.incoder.uiwidget.statusbar; + + +import android.graphics.drawable.Drawable; +import android.os.Bundle; +import android.support.annotation.NonNull; +import android.support.v4.app.Fragment; +import android.support.v7.app.AppCompatActivity; +import android.support.v7.widget.Toolbar; +import android.view.LayoutInflater; +import android.view.Menu; +import android.view.MenuInflater; +import android.view.MenuItem; +import android.view.View; +import android.view.ViewGroup; +import android.widget.LinearLayout; +import android.widget.RadioButton; + +import org.incoder.uiwidget.R; + +import java.util.Objects; + +import butterknife.BindDrawable; +import butterknife.BindView; +import butterknife.ButterKnife; +import butterknife.OnClick; +import butterknife.Unbinder; + +/** + * 渐变色 + * + * @author Jerry xu + * @date 7/29/2019 1:00 AM. + */ +public class GradientFragment extends Fragment { + + @BindView(R.id.ll_toolbar) + LinearLayout mLinearToolbar; + @BindView(R.id.toolbar) + Toolbar toolbar; + @BindView(R.id.status_bar_fix) + View mBar; + @BindView(R.id.rb_shape) + RadioButton rbShape; + @BindView(R.id.rb_img) + RadioButton rbImg; + @BindView(R.id.rb_light) + RadioButton rbLight; + @BindView(R.id.rb_black) + RadioButton rbBlack; + + @BindDrawable(R.drawable.gradient_status_bar) + Drawable shapeGradient; + @BindDrawable(R.drawable.gradient_img) + Drawable imgGradient; + + Unbinder unbinder; + + @OnClick({R.id.rb_shape, R.id.rb_img}) + void shapeGradient(View view) { + if (view.getId() == R.id.rb_shape) { + mLinearToolbar.setBackground(shapeGradient); + } else { + mLinearToolbar.setBackground(imgGradient); + } + } + + @OnClick({R.id.rb_light, R.id.rb_black}) + void selectMode(View view) { + if (view.getId() == R.id.rb_light) { + StatusUtils.setStatusBarLightMode(Objects.requireNonNull(getActivity()).getWindow(), false); + } else { + StatusUtils.setStatusBarLightMode(Objects.requireNonNull(getActivity()).getWindow(), true); + } + } + + public GradientFragment() { + // Required empty public constructor + } + + + @Override + public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + // Inflate the layout for this fragment + View view = inflater.inflate(R.layout.fragment_gradient, container, false); + unbinder = ButterKnife.bind(this, view); + // 填充状态栏 + mBar.setLayoutParams(new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, StatusUtils.getStatusBarHeight(Objects.requireNonNull(getActivity())))); + ((AppCompatActivity) getActivity()).setSupportActionBar(toolbar); + setHasOptionsMenu(true); + return view; + } + + @Override + public void onDestroyView() { + super.onDestroyView(); + unbinder.unbind(); + } + + @Override + public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { + inflater.inflate(R.menu.info, menu); + super.onCreateOptionsMenu(menu, inflater); + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + return super.onOptionsItemSelected(item); + } +} diff --git a/app/src/main/java/org/incoder/uiwidget/statusbar/ImageFragment.java b/app/src/main/java/org/incoder/uiwidget/statusbar/ImageFragment.java new file mode 100644 index 0000000..3f21b77 --- /dev/null +++ b/app/src/main/java/org/incoder/uiwidget/statusbar/ImageFragment.java @@ -0,0 +1,71 @@ +/* + * Copyright (C) 2018 The Jerry xu Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.incoder.uiwidget.statusbar; + + +import android.graphics.Color; +import android.os.Build; +import android.os.Bundle; +import android.support.annotation.NonNull; +import android.support.v4.app.Fragment; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.view.Window; +import android.view.WindowManager; + +import org.incoder.uiwidget.R; + +/** + * StatusBarActivity + * + * @author Jerry xu + * @date 7/29/2019 1:00 AM. + */ +public class ImageFragment extends Fragment { + + + public ImageFragment() { + // Required empty public constructor + } + + + @Override + public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + if (Build.VERSION.SDK_INT>= Build.VERSION_CODES.KITKAT) { + // 4.4 + getActivity().getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); + } + if (Build.VERSION.SDK_INT>= Build.VERSION_CODES.LOLLIPOP) { + // 5.0 + Window window = getActivity().getWindow(); + // 确认取消半透明设置 + window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); + // 全屏显示,status bar 不隐藏,activity 上方layout会被status bar覆盖 + window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN + // 配合其他flag使用,防止system bar改变layout的变动 + | View.SYSTEM_UI_FLAG_LAYOUT_STABLE); + // 跟系统标识要渲染system bar背景 + window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); + window.setStatusBarColor(Color.TRANSPARENT); + } + // Inflate the layout for this fragment + return inflater.inflate(R.layout.fragment_image, container, false); + } + +} diff --git a/app/src/main/java/org/incoder/uiwidget/statusbar/MagicFragment.java b/app/src/main/java/org/incoder/uiwidget/statusbar/MagicFragment.java new file mode 100644 index 0000000..9c1efaa --- /dev/null +++ b/app/src/main/java/org/incoder/uiwidget/statusbar/MagicFragment.java @@ -0,0 +1,88 @@ +/* + * Copyright (C) 2018 The Jerry xu Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.incoder.uiwidget.statusbar; + + +import android.os.Bundle; +import android.support.annotation.NonNull; +import android.support.v4.app.Fragment; +import android.support.v7.widget.Toolbar; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.SeekBar; +import android.widget.TextView; + +import org.incoder.uiwidget.R; + +import butterknife.BindView; +import butterknife.ButterKnife; +import butterknife.Unbinder; + +/** + * 魔法状态栏 + * + * @author Jerry xu + * @date 7/29/2019 1:00 AM. + */ +public class MagicFragment extends Fragment { + + + @BindView(R.id.toolbar) + Toolbar toolbar; + @BindView(R.id.tv_transparency) + TextView tvTransparency; + @BindView(R.id.sb_transparency) + SeekBar sbTransparency; + + Unbinder unbinder; + + public MagicFragment() { + // Required empty public constructor + } + + + @Override + public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + // Inflate the layout for this fragment + View view = inflater.inflate(R.layout.fragment_magic, container, false); + unbinder = ButterKnife.bind(this, view); +// ((AppCompatActivity) getActivity()).setSupportActionBar(toolbar); +// setHasOptionsMenu(true); + return view; + } + + @Override + public void onDestroyView() { + super.onDestroyView(); + unbinder.unbind(); + } + + +// @Override +// public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { +// inflater.inflate(R.menu.info, menu); +// super.onCreateOptionsMenu(menu,inflater); +// } +// +// @Override +// public boolean onOptionsItemSelected(MenuItem item) { +// return super.onOptionsItemSelected(item); +// +// } +} diff --git a/app/src/main/java/org/incoder/uiwidget/statusbar/StatusBarActivity.java b/app/src/main/java/org/incoder/uiwidget/statusbar/StatusBarActivity.java new file mode 100644 index 0000000..479c8b8 --- /dev/null +++ b/app/src/main/java/org/incoder/uiwidget/statusbar/StatusBarActivity.java @@ -0,0 +1,113 @@ +/* + * Copyright (C) 2019 The Jerry xu Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.incoder.uiwidget.statusbar; + +import android.os.Bundle; +import android.support.annotation.NonNull; +import android.support.design.widget.BottomNavigationView; +import android.support.v4.app.Fragment; +import android.support.v4.view.ViewPager; +import android.support.v7.app.AppCompatActivity; +import android.view.MenuItem; + +import org.incoder.uiwidget.BasePagerAdapter; +import org.incoder.uiwidget.R; + +import java.util.ArrayList; + +import butterknife.BindView; +import butterknife.ButterKnife; + +/** + * StatusBarActivity + * + * @author Jerry xu + * @date 7/29/2019 1:00 AM. + */ +public class StatusBarActivity extends AppCompatActivity { + + @BindView(R.id.vp_content) + ViewPager vpContent; + @BindView(R.id.nav_view) + BottomNavigationView navView; + + private ArrayList mFragments = new ArrayList(); + + private BottomNavigationView.OnNavigationItemSelectedListener mOnNavigationItemSelectedListener + = new BottomNavigationView.OnNavigationItemSelectedListener() { + + @Override + public boolean onNavigationItemSelected(@NonNull MenuItem item) { + switch (item.getItemId()) { + case R.id.navigation_image: + vpContent.setCurrentItem(0); + return true; + case R.id.navigation_translucent: + vpContent.setCurrentItem(1); + return true; + case R.id.navigation_gradient: + vpContent.setCurrentItem(2); + return true; + case R.id.navigation_magic: + vpContent.setCurrentItem(3); + return true; + default: + break; + } + return false; + } + }; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_status_bar); + ButterKnife.bind(this); + navView.setOnNavigationItemSelectedListener(mOnNavigationItemSelectedListener); + mFragments.add(new ImageFragment()); + mFragments.add(new TranslucentFragment()); + mFragments.add(new GradientFragment()); + mFragments.add(new MagicFragment()); + vpContent.setOffscreenPageLimit(mFragments.size()); + vpContent.setAdapter(new BasePagerAdapter(getSupportFragmentManager(), mFragments)); + vpContent.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { + @Override + public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { + + } + + @Override + public void onPageSelected(int position) { + if (position == 0) { + navView.setSelectedItemId(R.id.navigation_image); + } else if (position == 1) { + navView.setSelectedItemId(R.id.navigation_translucent); + } else if (position == 2) { + navView.setSelectedItemId(R.id.navigation_gradient); + } else if (position == 3) { + navView.setSelectedItemId(R.id.navigation_magic); + } + } + + @Override + public void onPageScrollStateChanged(int state) { + + } + }); + } + +} diff --git a/app/src/main/java/org/incoder/uiwidget/statusbar/StatusUtils.java b/app/src/main/java/org/incoder/uiwidget/statusbar/StatusUtils.java new file mode 100644 index 0000000..539cb82 --- /dev/null +++ b/app/src/main/java/org/incoder/uiwidget/statusbar/StatusUtils.java @@ -0,0 +1,73 @@ +package org.incoder.uiwidget.statusbar; + +import android.app.Activity; +import android.os.Build; +import android.support.annotation.NonNull; +import android.support.v7.widget.Toolbar; +import android.view.View; +import android.view.Window; +import android.view.WindowManager; + +import org.incoder.uiwidget.R; + +/** + * StatusUtils + * + * @author : Jerry xu + * @date : 2019年7月31日 15:18 + */ +public class StatusUtils { + + /** + * Let toolbar to extend to status bar. + * + * @notice this method have to be used after setContentView. + */ + public static void setToolbar(Activity activity) { + // Set the padding to match the Status Bar height + Toolbar toolbar = activity.findViewById(R.id.toolbar); + toolbar.setPadding(0, getStatusBarHeight(activity), 0, 0); + } + + /** + * Get StatusBar height + * + * @return height of status bar + */ + public static int getStatusBarHeight(Activity activity) { + int result = 0; + int resourceId = activity.getResources() + .getIdentifier("status_bar_height", "dimen", "android"); + if (resourceId> 0) { + result = activity.getResources().getDimensionPixelSize(resourceId); + } + return result; + } + + /** + * Set the status bar's light mode. + * + * @param window The window. + * @param isLightMode True to set status bar light mode, false otherwise. + */ + public static void setStatusBarLightMode(@NonNull final Window window, + final boolean isLightMode) { + if (Build.VERSION.SDK_INT>= Build.VERSION_CODES.M) { + View decorView = window.getDecorView(); + if (decorView != null) { + int vis = decorView.getSystemUiVisibility(); + if (isLightMode) { + window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); + vis |= View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN; + vis |= View.SYSTEM_UI_FLAG_LAYOUT_STABLE; + // 状态栏icon 表现为深色系 + vis |= View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR; + } else { + vis &= ~View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR; + } + decorView.setSystemUiVisibility(vis); + } + } + } + +} diff --git a/app/src/main/java/org/incoder/uiwidget/statusbar/TranslucentFragment.java b/app/src/main/java/org/incoder/uiwidget/statusbar/TranslucentFragment.java new file mode 100644 index 0000000..f377d7a --- /dev/null +++ b/app/src/main/java/org/incoder/uiwidget/statusbar/TranslucentFragment.java @@ -0,0 +1,82 @@ +/* + * Copyright (C) 2018 The Jerry xu Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.incoder.uiwidget.statusbar; + + +import android.graphics.Color; +import android.os.Build; +import android.os.Bundle; +import android.support.annotation.NonNull; +import android.support.v4.app.Fragment; +import android.support.v7.widget.Toolbar; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.view.Window; +import android.view.WindowManager; + +import org.incoder.uiwidget.R; + +import butterknife.BindView; +import butterknife.ButterKnife; +import butterknife.Unbinder; + +/** + * 透明色 + * + * @author Jerry xu + * @date 7/29/2019 1:00 AM. + */ +public class TranslucentFragment extends Fragment { + + @BindView(R.id.toolbar) + Toolbar mToolbar; + Unbinder unbinder; + + public TranslucentFragment() { + // Required empty public constructor + } + + + @Override + public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + if (Build.VERSION.SDK_INT>= Build.VERSION_CODES.KITKAT){ // 4.4 + getActivity().getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); + } + + if (Build.VERSION.SDK_INT>= Build.VERSION_CODES.LOLLIPOP) { // 5.0 + Window window = getActivity().getWindow(); + window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); // 確認取消半透明設置。 + window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN // 全螢幕顯示,status bar 不隱藏,activity 上方 layout 會被 status bar 覆蓋。 + | View.SYSTEM_UI_FLAG_LAYOUT_STABLE); // 配合其他 flag 使用,防止 system bar 改變後 layout 的變動。 + window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); // 跟系統表示要渲染 system bar 背景。 + window.setStatusBarColor(Color.TRANSPARENT); + } + // Inflate the layout for this fragment + View view = inflater.inflate(R.layout.fragment_translucent, container, false); + unbinder = ButterKnife.bind(this, view); + return view; + } + + + @Override + public void onDestroyView() { + super.onDestroyView(); + unbinder.unbind(); + } +} diff --git a/app/src/main/java/org/incoder/uiwidget/text/AutoCompleteTextViewFragment.java b/app/src/main/java/org/incoder/uiwidget/text/AutoCompleteTextViewFragment.java new file mode 100644 index 0000000..19ba751 --- /dev/null +++ b/app/src/main/java/org/incoder/uiwidget/text/AutoCompleteTextViewFragment.java @@ -0,0 +1,34 @@ +package org.incoder.uiwidget.text; + + +import android.os.Bundle; +import android.support.annotation.NonNull; +import android.support.v4.app.Fragment; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import org.incoder.uiwidget.R; + +/** + * AutoCompleteTextViewFragment + * + * @author Jerry xu + * @date 4/6/2018 8:00 AM. + */ +public class AutoCompleteTextViewFragment extends Fragment { + + + public AutoCompleteTextViewFragment() { + // Required empty public constructor + } + + + @Override + public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + // Inflate the layout for this fragment + return inflater.inflate(R.layout.fragment_auto_complete_text_view, container, false); + } + +} diff --git a/app/src/main/java/org/incoder/uiwidget/text/CheckedTextViewFragment.java b/app/src/main/java/org/incoder/uiwidget/text/CheckedTextViewFragment.java new file mode 100644 index 0000000..a09e082 --- /dev/null +++ b/app/src/main/java/org/incoder/uiwidget/text/CheckedTextViewFragment.java @@ -0,0 +1,34 @@ +package org.incoder.uiwidget.text; + + +import android.os.Bundle; +import android.support.annotation.NonNull; +import android.support.v4.app.Fragment; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import org.incoder.uiwidget.R; + +/** + * CheckedTextViewFragment + * + * @author Jerry xu + * @date 4/6/2018 8:00 AM. + */ +public class CheckedTextViewFragment extends Fragment { + + + public CheckedTextViewFragment() { + // Required empty public constructor + } + + + @Override + public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + // Inflate the layout for this fragment + return inflater.inflate(R.layout.fragment_checked_text_view, container, false); + } + +} diff --git a/app/src/main/java/org/incoder/uiwidget/text/DateFragment.java b/app/src/main/java/org/incoder/uiwidget/text/DateFragment.java new file mode 100644 index 0000000..be86369 --- /dev/null +++ b/app/src/main/java/org/incoder/uiwidget/text/DateFragment.java @@ -0,0 +1,34 @@ +package org.incoder.uiwidget.text; + + +import android.os.Bundle; +import android.support.annotation.NonNull; +import android.support.v4.app.Fragment; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import org.incoder.uiwidget.R; + +/** + * DateFragment + * + * @author Jerry xu + * @date 4/6/2018 8:00 AM. + */ +public class DateFragment extends Fragment { + + + public DateFragment() { + // Required empty public constructor + } + + + @Override + public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + // Inflate the layout for this fragment + return inflater.inflate(R.layout.fragment_date, container, false); + } + +} diff --git a/app/src/main/java/org/incoder/uiwidget/text/EmailFragment.java b/app/src/main/java/org/incoder/uiwidget/text/EmailFragment.java new file mode 100644 index 0000000..dcc9eb6 --- /dev/null +++ b/app/src/main/java/org/incoder/uiwidget/text/EmailFragment.java @@ -0,0 +1,34 @@ +package org.incoder.uiwidget.text; + + +import android.os.Bundle; +import android.support.annotation.NonNull; +import android.support.v4.app.Fragment; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import org.incoder.uiwidget.R; + +/** + * EmailFragment + * + * @author Jerry xu + * @date 4/6/2018 8:00 AM. + */ +public class EmailFragment extends Fragment { + + + public EmailFragment() { + // Required empty public constructor + } + + + @Override + public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + // Inflate the layout for this fragment + return inflater.inflate(R.layout.fragment_email, container, false); + } + +} diff --git a/app/src/main/java/org/incoder/uiwidget/text/MultiAutoCompleteTextViewFragment.java b/app/src/main/java/org/incoder/uiwidget/text/MultiAutoCompleteTextViewFragment.java new file mode 100644 index 0000000..4ae93e6 --- /dev/null +++ b/app/src/main/java/org/incoder/uiwidget/text/MultiAutoCompleteTextViewFragment.java @@ -0,0 +1,34 @@ +package org.incoder.uiwidget.text; + + +import android.os.Bundle; +import android.support.annotation.NonNull; +import android.support.v4.app.Fragment; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import org.incoder.uiwidget.R; + +/** + * MultiAutoCompleteTextViewFragment + * + * @author Jerry xu + * @date 4/6/2018 8:00 AM. + */ +public class MultiAutoCompleteTextViewFragment extends Fragment { + + + public MultiAutoCompleteTextViewFragment() { + // Required empty public constructor + } + + + @Override + public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + // Inflate the layout for this fragment + return inflater.inflate(R.layout.fragment_multi_auto_complete_text_view, container, false); + } + +} diff --git a/app/src/main/java/org/incoder/uiwidget/text/MultilineTextFragment.java b/app/src/main/java/org/incoder/uiwidget/text/MultilineTextFragment.java new file mode 100644 index 0000000..dd00a30 --- /dev/null +++ b/app/src/main/java/org/incoder/uiwidget/text/MultilineTextFragment.java @@ -0,0 +1,34 @@ +package org.incoder.uiwidget.text; + + +import android.os.Bundle; +import android.support.annotation.NonNull; +import android.support.v4.app.Fragment; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import org.incoder.uiwidget.R; + +/** + * MultilineTextFragment + * + * @author Jerry xu + * @date 4/6/2018 8:00 AM. + */ +public class MultilineTextFragment extends Fragment { + + + public MultilineTextFragment() { + // Required empty public constructor + } + + + @Override + public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + // Inflate the layout for this fragment + return inflater.inflate(R.layout.fragment_multiline_text, container, false); + } + +} diff --git a/app/src/main/java/org/incoder/uiwidget/text/NumberFragment.java b/app/src/main/java/org/incoder/uiwidget/text/NumberFragment.java new file mode 100644 index 0000000..417f384 --- /dev/null +++ b/app/src/main/java/org/incoder/uiwidget/text/NumberFragment.java @@ -0,0 +1,34 @@ +package org.incoder.uiwidget.text; + + +import android.os.Bundle; +import android.support.annotation.NonNull; +import android.support.v4.app.Fragment; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import org.incoder.uiwidget.R; + +/** + * NumberFragment + * + * @author Jerry xu + * @date 4/6/2018 8:00 AM. + */ +public class NumberFragment extends Fragment { + + + public NumberFragment() { + // Required empty public constructor + } + + + @Override + public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + // Inflate the layout for this fragment + return inflater.inflate(R.layout.fragment_number, container, false); + } + +} diff --git a/app/src/main/java/org/incoder/uiwidget/text/PasswordFragment.java b/app/src/main/java/org/incoder/uiwidget/text/PasswordFragment.java new file mode 100644 index 0000000..c8da7a3 --- /dev/null +++ b/app/src/main/java/org/incoder/uiwidget/text/PasswordFragment.java @@ -0,0 +1,34 @@ +package org.incoder.uiwidget.text; + + +import android.os.Bundle; +import android.support.annotation.NonNull; +import android.support.v4.app.Fragment; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import org.incoder.uiwidget.R; + +/** + * PasswordFragment + * + * @author Jerry xu + * @date 4/6/2018 8:00 AM. + */ +public class PasswordFragment extends Fragment { + + + public PasswordFragment() { + // Required empty public constructor + } + + + @Override + public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + // Inflate the layout for this fragment + return inflater.inflate(R.layout.fragment_password, container, false); + } + +} diff --git a/app/src/main/java/org/incoder/uiwidget/text/PhoneFragment.java b/app/src/main/java/org/incoder/uiwidget/text/PhoneFragment.java new file mode 100644 index 0000000..efe596d --- /dev/null +++ b/app/src/main/java/org/incoder/uiwidget/text/PhoneFragment.java @@ -0,0 +1,34 @@ +package org.incoder.uiwidget.text; + + +import android.os.Bundle; +import android.support.annotation.NonNull; +import android.support.v4.app.Fragment; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import org.incoder.uiwidget.R; + +/** + * PhoneFragment + * + * @author Jerry xu + * @date 4/6/2018 8:00 AM. + */ +public class PhoneFragment extends Fragment { + + + public PhoneFragment() { + // Required empty public constructor + } + + + @Override + public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + // Inflate the layout for this fragment + return inflater.inflate(R.layout.fragment_phone, container, false); + } + +} diff --git a/app/src/main/java/org/incoder/uiwidget/text/PlainTextFragment.java b/app/src/main/java/org/incoder/uiwidget/text/PlainTextFragment.java new file mode 100644 index 0000000..8dfd8ee --- /dev/null +++ b/app/src/main/java/org/incoder/uiwidget/text/PlainTextFragment.java @@ -0,0 +1,34 @@ +package org.incoder.uiwidget.text; + + +import android.os.Bundle; +import android.support.annotation.NonNull; +import android.support.v4.app.Fragment; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import org.incoder.uiwidget.R; + +/** + * PlainTextFragment + * + * @author Jerry xu + * @date 4/6/2018 8:00 AM. + */ +public class PlainTextFragment extends Fragment { + + + public PlainTextFragment() { + // Required empty public constructor + } + + + @Override + public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + // Inflate the layout for this fragment + return inflater.inflate(R.layout.fragment_plain_text, container, false); + } + +} diff --git a/app/src/main/java/org/incoder/uiwidget/text/PostalAddressFragment.java b/app/src/main/java/org/incoder/uiwidget/text/PostalAddressFragment.java new file mode 100644 index 0000000..5b58a2b --- /dev/null +++ b/app/src/main/java/org/incoder/uiwidget/text/PostalAddressFragment.java @@ -0,0 +1,34 @@ +package org.incoder.uiwidget.text; + + +import android.os.Bundle; +import android.support.annotation.NonNull; +import android.support.v4.app.Fragment; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import org.incoder.uiwidget.R; + +/** + * PostalAddressFragment + * + * @author Jerry xu + * @date 4/6/2018 8:00 AM. + */ +public class PostalAddressFragment extends Fragment { + + + public PostalAddressFragment() { + // Required empty public constructor + } + + + @Override + public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + // Inflate the layout for this fragment + return inflater.inflate(R.layout.fragment_postal_address, container, false); + } + +} diff --git a/app/src/main/java/org/incoder/uiwidget/text/TextInputLayoutFragment.java b/app/src/main/java/org/incoder/uiwidget/text/TextInputLayoutFragment.java new file mode 100644 index 0000000..a1b94f0 --- /dev/null +++ b/app/src/main/java/org/incoder/uiwidget/text/TextInputLayoutFragment.java @@ -0,0 +1,34 @@ +package org.incoder.uiwidget.text; + + +import android.os.Bundle; +import android.support.annotation.NonNull; +import android.support.v4.app.Fragment; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import org.incoder.uiwidget.R; + +/** + * TextInputLayoutFragment + * + * @author Jerry xu + * @date 4/6/2018 8:00 AM. + */ +public class TextInputLayoutFragment extends Fragment { + + + public TextInputLayoutFragment() { + // Required empty public constructor + } + + + @Override + public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + // Inflate the layout for this fragment + return inflater.inflate(R.layout.fragment_text_input_layout, container, false); + } + +} diff --git a/app/src/main/java/org/incoder/uiwidget/text/TextViewFragment.java b/app/src/main/java/org/incoder/uiwidget/text/TextViewFragment.java new file mode 100644 index 0000000..944a32d --- /dev/null +++ b/app/src/main/java/org/incoder/uiwidget/text/TextViewFragment.java @@ -0,0 +1,49 @@ +package org.incoder.uiwidget.text; + + +import android.os.Bundle; +import android.support.annotation.NonNull; +import android.support.v4.app.Fragment; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import org.incoder.uiwidget.R; + +import butterknife.BindView; +import butterknife.ButterKnife; +import butterknife.Unbinder; + +/** + * TextViewFragment + * + * @author Jerry xu + * @date 4/6/2018 6:00 AM. + */ +public class TextViewFragment extends Fragment { + + @BindView(R.id.tv_textView) + TextView tvTextView; + Unbinder unbinder; + + public TextViewFragment() { + // Required empty public constructor + } + + + @Override + public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + // Inflate the layout for this fragment + View view = inflater.inflate(R.layout.fragment_text_view, container, false); + unbinder = ButterKnife.bind(this, view); + return view; + } + + @Override + public void onDestroyView() { + super.onDestroyView(); + unbinder.unbind(); + } +} diff --git a/app/src/main/java/org/incoder/uiwidget/text/TimeFragment.java b/app/src/main/java/org/incoder/uiwidget/text/TimeFragment.java new file mode 100644 index 0000000..ff34524 --- /dev/null +++ b/app/src/main/java/org/incoder/uiwidget/text/TimeFragment.java @@ -0,0 +1,34 @@ +package org.incoder.uiwidget.text; + + +import android.os.Bundle; +import android.support.annotation.NonNull; +import android.support.v4.app.Fragment; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import org.incoder.uiwidget.R; + +/** + * TimeFragment + * + * @author Jerry xu + * @date 4/6/2018 8:00 AM. + */ +public class TimeFragment extends Fragment { + + + public TimeFragment() { + // Required empty public constructor + } + + + @Override + public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + // Inflate the layout for this fragment + return inflater.inflate(R.layout.fragment_time, container, false); + } + +} diff --git a/app/src/main/java/org/incoder/uiwidget/widgets/CalendarViewFragment.java b/app/src/main/java/org/incoder/uiwidget/widgets/CalendarViewFragment.java new file mode 100644 index 0000000..73f4302 --- /dev/null +++ b/app/src/main/java/org/incoder/uiwidget/widgets/CalendarViewFragment.java @@ -0,0 +1,34 @@ +package org.incoder.uiwidget.widgets; + + +import android.os.Bundle; +import android.support.annotation.NonNull; +import android.support.v4.app.Fragment; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import org.incoder.uiwidget.R; + +/** + * CalendarViewFragment + * + * @author Jerry xu + * @date 4/6/2018 8:00 AM. + */ +public class CalendarViewFragment extends Fragment { + + + public CalendarViewFragment() { + // Required empty public constructor + } + + + @Override + public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + // Inflate the layout for this fragment + return inflater.inflate(R.layout.fragment_calendar_view, container, false); + } + +} diff --git a/app/src/main/java/org/incoder/uiwidget/widgets/DividerFragment.java b/app/src/main/java/org/incoder/uiwidget/widgets/DividerFragment.java new file mode 100644 index 0000000..3252502 --- /dev/null +++ b/app/src/main/java/org/incoder/uiwidget/widgets/DividerFragment.java @@ -0,0 +1,34 @@ +package org.incoder.uiwidget.widgets; + + +import android.os.Bundle; +import android.support.annotation.NonNull; +import android.support.v4.app.Fragment; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import org.incoder.uiwidget.R; + +/** + * DividerFragment + * + * @author Jerry xu + * @date 4/6/2018 8:00 AM. + */ +public class DividerFragment extends Fragment { + + + public DividerFragment() { + // Required empty public constructor + } + + + @Override + public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + // Inflate the layout for this fragment + return inflater.inflate(R.layout.fragment_divider, container, false); + } + +} diff --git a/app/src/main/java/org/incoder/uiwidget/widgets/ImageViewFragment.java b/app/src/main/java/org/incoder/uiwidget/widgets/ImageViewFragment.java new file mode 100644 index 0000000..6af8f42 --- /dev/null +++ b/app/src/main/java/org/incoder/uiwidget/widgets/ImageViewFragment.java @@ -0,0 +1,34 @@ +package org.incoder.uiwidget.widgets; + + +import android.os.Bundle; +import android.support.annotation.NonNull; +import android.support.v4.app.Fragment; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import org.incoder.uiwidget.R; + +/** + * ImageViewFragment + * + * @author Jerry xu + * @date 4/6/2018 8:00 AM. + */ +public class ImageViewFragment extends Fragment { + + + public ImageViewFragment() { + // Required empty public constructor + } + + + @Override + public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + // Inflate the layout for this fragment + return inflater.inflate(R.layout.fragment_image_view, container, false); + } + +} diff --git a/app/src/main/java/org/incoder/uiwidget/widgets/ProgressBarFragment.java b/app/src/main/java/org/incoder/uiwidget/widgets/ProgressBarFragment.java new file mode 100644 index 0000000..fbdff40 --- /dev/null +++ b/app/src/main/java/org/incoder/uiwidget/widgets/ProgressBarFragment.java @@ -0,0 +1,34 @@ +package org.incoder.uiwidget.widgets; + + +import android.os.Bundle; +import android.support.annotation.NonNull; +import android.support.v4.app.Fragment; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import org.incoder.uiwidget.R; + +/** + * ProgressBarFragment + * + * @author Jerry xu + * @date 4/6/2018 8:00 AM. + */ +public class ProgressBarFragment extends Fragment { + + + public ProgressBarFragment() { + // Required empty public constructor + } + + + @Override + public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + // Inflate the layout for this fragment + return inflater.inflate(R.layout.fragment_progress_bar, container, false); + } + +} diff --git a/app/src/main/java/org/incoder/uiwidget/widgets/RatingBarFragment.java b/app/src/main/java/org/incoder/uiwidget/widgets/RatingBarFragment.java new file mode 100644 index 0000000..e4cb919 --- /dev/null +++ b/app/src/main/java/org/incoder/uiwidget/widgets/RatingBarFragment.java @@ -0,0 +1,34 @@ +package org.incoder.uiwidget.widgets; + + +import android.os.Bundle; +import android.support.annotation.NonNull; +import android.support.v4.app.Fragment; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import org.incoder.uiwidget.R; + +/** + * RatingBarFragment + * + * @author Jerry xu + * @date 4/6/2018 8:00 AM. + */ +public class RatingBarFragment extends Fragment { + + + public RatingBarFragment() { + // Required empty public constructor + } + + + @Override + public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + // Inflate the layout for this fragment + return inflater.inflate(R.layout.fragment_rating_bar, container, false); + } + +} diff --git a/app/src/main/java/org/incoder/uiwidget/widgets/SearchViewFragment.java b/app/src/main/java/org/incoder/uiwidget/widgets/SearchViewFragment.java new file mode 100644 index 0000000..56c14aa --- /dev/null +++ b/app/src/main/java/org/incoder/uiwidget/widgets/SearchViewFragment.java @@ -0,0 +1,34 @@ +package org.incoder.uiwidget.widgets; + + +import android.os.Bundle; +import android.support.annotation.NonNull; +import android.support.v4.app.Fragment; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import org.incoder.uiwidget.R; + +/** + * SearchViewFragment + * + * @author Jerry xu + * @date 4/6/2018 8:00 AM. + */ +public class SearchViewFragment extends Fragment { + + + public SearchViewFragment() { + // Required empty public constructor + } + + + @Override + public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + // Inflate the layout for this fragment + return inflater.inflate(R.layout.fragment_search_view, container, false); + } + +} diff --git a/app/src/main/java/org/incoder/uiwidget/widgets/SeekBarFragment.java b/app/src/main/java/org/incoder/uiwidget/widgets/SeekBarFragment.java new file mode 100644 index 0000000..4fd4a5d --- /dev/null +++ b/app/src/main/java/org/incoder/uiwidget/widgets/SeekBarFragment.java @@ -0,0 +1,34 @@ +package org.incoder.uiwidget.widgets; + + +import android.os.Bundle; +import android.support.annotation.NonNull; +import android.support.v4.app.Fragment; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import org.incoder.uiwidget.R; + +/** + * SeekBarFragment + * + * @author Jerry xu + * @date 4/6/2018 8:00 AM. + */ +public class SeekBarFragment extends Fragment { + + + public SeekBarFragment() { + // Required empty public constructor + } + + + @Override + public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + // Inflate the layout for this fragment + return inflater.inflate(R.layout.fragment_seek_bar, container, false); + } + +} diff --git a/app/src/main/java/org/incoder/uiwidget/widgets/SurfaceViewFragment.java b/app/src/main/java/org/incoder/uiwidget/widgets/SurfaceViewFragment.java new file mode 100644 index 0000000..f059d74 --- /dev/null +++ b/app/src/main/java/org/incoder/uiwidget/widgets/SurfaceViewFragment.java @@ -0,0 +1,34 @@ +package org.incoder.uiwidget.widgets; + + +import android.os.Bundle; +import android.support.annotation.NonNull; +import android.support.v4.app.Fragment; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import org.incoder.uiwidget.R; + +/** + * SurfaceViewFragment + * + * @author Jerry xu + * @date 4/6/2018 8:00 AM. + */ +public class SurfaceViewFragment extends Fragment { + + + public SurfaceViewFragment() { + // Required empty public constructor + } + + + @Override + public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + // Inflate the layout for this fragment + return inflater.inflate(R.layout.fragment_surface_view, container, false); + } + +} diff --git a/app/src/main/java/org/incoder/uiwidget/widgets/TextureViewFragment.java b/app/src/main/java/org/incoder/uiwidget/widgets/TextureViewFragment.java new file mode 100644 index 0000000..6494764 --- /dev/null +++ b/app/src/main/java/org/incoder/uiwidget/widgets/TextureViewFragment.java @@ -0,0 +1,34 @@ +package org.incoder.uiwidget.widgets; + + +import android.os.Bundle; +import android.support.annotation.NonNull; +import android.support.v4.app.Fragment; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import org.incoder.uiwidget.R; + +/** + * TextureViewFragment + * + * @author Jerry xu + * @date 4/6/2018 8:00 AM. + */ +public class TextureViewFragment extends Fragment { + + + public TextureViewFragment() { + // Required empty public constructor + } + + + @Override + public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + // Inflate the layout for this fragment + return inflater.inflate(R.layout.fragment_texture_view, container, false); + } + +} diff --git a/app/src/main/java/org/incoder/uiwidget/widgets/VideoViewFragment.java b/app/src/main/java/org/incoder/uiwidget/widgets/VideoViewFragment.java new file mode 100644 index 0000000..526c306 --- /dev/null +++ b/app/src/main/java/org/incoder/uiwidget/widgets/VideoViewFragment.java @@ -0,0 +1,34 @@ +package org.incoder.uiwidget.widgets; + + +import android.os.Bundle; +import android.support.annotation.NonNull; +import android.support.v4.app.Fragment; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import org.incoder.uiwidget.R; + +/** + * VideoViewFragment + * + * @author Jerry xu + * @date 4/6/2018 8:00 AM. + */ +public class VideoViewFragment extends Fragment { + + + public VideoViewFragment() { + // Required empty public constructor + } + + + @Override + public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + // Inflate the layout for this fragment + return inflater.inflate(R.layout.fragment_video_view, container, false); + } + +} diff --git a/app/src/main/java/org/incoder/uiwidget/widgets/WebViewFragment.java b/app/src/main/java/org/incoder/uiwidget/widgets/WebViewFragment.java new file mode 100644 index 0000000..215d9ee --- /dev/null +++ b/app/src/main/java/org/incoder/uiwidget/widgets/WebViewFragment.java @@ -0,0 +1,34 @@ +package org.incoder.uiwidget.widgets; + + +import android.os.Bundle; +import android.support.annotation.NonNull; +import android.support.v4.app.Fragment; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import org.incoder.uiwidget.R; + +/** + * WebViewFragment + * + * @author Jerry xu + * @date 4/6/2018 8:00 AM. + */ +public class WebViewFragment extends Fragment { + + + public WebViewFragment() { + // Required empty public constructor + } + + + @Override + public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + // Inflate the layout for this fragment + return inflater.inflate(R.layout.fragment_web_view, container, false); + } + +} diff --git a/app/src/main/res/drawable-v21/ic_button.xml b/app/src/main/res/drawable-v21/ic_button.xml new file mode 100644 index 0000000..23dff7f --- /dev/null +++ b/app/src/main/res/drawable-v21/ic_button.xml @@ -0,0 +1,4 @@ + + + + diff --git a/app/src/main/res/drawable-v21/ic_containers.xml b/app/src/main/res/drawable-v21/ic_containers.xml new file mode 100644 index 0000000..9766fb5 --- /dev/null +++ b/app/src/main/res/drawable-v21/ic_containers.xml @@ -0,0 +1,4 @@ + + + + diff --git a/app/src/main/res/drawable-v21/ic_google.xml b/app/src/main/res/drawable-v21/ic_google.xml new file mode 100644 index 0000000..c794f2a --- /dev/null +++ b/app/src/main/res/drawable-v21/ic_google.xml @@ -0,0 +1,4 @@ + + + + diff --git a/app/src/main/res/drawable-v21/ic_layout.xml b/app/src/main/res/drawable-v21/ic_layout.xml new file mode 100644 index 0000000..1f91125 --- /dev/null +++ b/app/src/main/res/drawable-v21/ic_layout.xml @@ -0,0 +1,4 @@ + + + + diff --git a/app/src/main/res/drawable-v21/ic_legacy.xml b/app/src/main/res/drawable-v21/ic_legacy.xml new file mode 100644 index 0000000..3eb9100 --- /dev/null +++ b/app/src/main/res/drawable-v21/ic_legacy.xml @@ -0,0 +1,4 @@ + + + + diff --git a/app/src/main/res/drawable-v21/ic_send.xml b/app/src/main/res/drawable-v21/ic_send.xml new file mode 100644 index 0000000..e5d35a7 --- /dev/null +++ b/app/src/main/res/drawable-v21/ic_send.xml @@ -0,0 +1,4 @@ + + + + diff --git a/app/src/main/res/drawable-v21/ic_share.xml b/app/src/main/res/drawable-v21/ic_share.xml new file mode 100644 index 0000000..68fa1d8 --- /dev/null +++ b/app/src/main/res/drawable-v21/ic_share.xml @@ -0,0 +1,4 @@ + + + + diff --git a/app/src/main/res/drawable-v21/ic_text.xml b/app/src/main/res/drawable-v21/ic_text.xml new file mode 100644 index 0000000..07a9950 --- /dev/null +++ b/app/src/main/res/drawable-v21/ic_text.xml @@ -0,0 +1,4 @@ + + + + diff --git a/app/src/main/res/drawable-v21/ic_widgets.xml b/app/src/main/res/drawable-v21/ic_widgets.xml new file mode 100644 index 0000000..444be55 --- /dev/null +++ b/app/src/main/res/drawable-v21/ic_widgets.xml @@ -0,0 +1,4 @@ + + + + diff --git a/app/src/main/res/drawable-v24/ic_launcher_foreground.xml b/app/src/main/res/drawable-v24/ic_launcher_foreground.xml new file mode 100644 index 0000000..c7bd21d --- /dev/null +++ b/app/src/main/res/drawable-v24/ic_launcher_foreground.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + diff --git a/app/src/main/res/drawable-xxxhdpi/gradient_img.jpg b/app/src/main/res/drawable-xxxhdpi/gradient_img.jpg new file mode 100644 index 0000000..bbba5ac Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/gradient_img.jpg differ diff --git a/app/src/main/res/drawable-xxxhdpi/img_naruto.jpg b/app/src/main/res/drawable-xxxhdpi/img_naruto.jpg new file mode 100644 index 0000000..ff33cdd Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/img_naruto.jpg differ diff --git a/app/src/main/res/drawable-xxxhdpi/spiderman.jpg b/app/src/main/res/drawable-xxxhdpi/spiderman.jpg new file mode 100644 index 0000000..903ad8e Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/spiderman.jpg differ diff --git a/app/src/main/res/drawable/bottom_sheets_background.xml b/app/src/main/res/drawable/bottom_sheets_background.xml new file mode 100644 index 0000000..9379f6d --- /dev/null +++ b/app/src/main/res/drawable/bottom_sheets_background.xml @@ -0,0 +1,24 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/gradient_status_bar.xml b/app/src/main/res/drawable/gradient_status_bar.xml new file mode 100644 index 0000000..647d41d --- /dev/null +++ b/app/src/main/res/drawable/gradient_status_bar.xml @@ -0,0 +1,10 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_baseline_ballot_24px.xml b/app/src/main/res/drawable/ic_baseline_ballot_24px.xml new file mode 100644 index 0000000..8d82b94 --- /dev/null +++ b/app/src/main/res/drawable/ic_baseline_ballot_24px.xml @@ -0,0 +1,12 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_broken_image_black_24dp.xml b/app/src/main/res/drawable/ic_broken_image_black_24dp.xml new file mode 100644 index 0000000..8d563a9 --- /dev/null +++ b/app/src/main/res/drawable/ic_broken_image_black_24dp.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_button.xml b/app/src/main/res/drawable/ic_button.xml new file mode 100644 index 0000000..23dff7f --- /dev/null +++ b/app/src/main/res/drawable/ic_button.xml @@ -0,0 +1,4 @@ + + + + diff --git a/app/src/main/res/drawable/ic_containers.xml b/app/src/main/res/drawable/ic_containers.xml new file mode 100644 index 0000000..9766fb5 --- /dev/null +++ b/app/src/main/res/drawable/ic_containers.xml @@ -0,0 +1,4 @@ + + + + diff --git a/app/src/main/res/drawable/ic_flip_black_24dp.xml b/app/src/main/res/drawable/ic_flip_black_24dp.xml new file mode 100644 index 0000000..2bc2762 --- /dev/null +++ b/app/src/main/res/drawable/ic_flip_black_24dp.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_google.xml b/app/src/main/res/drawable/ic_google.xml new file mode 100644 index 0000000..c794f2a --- /dev/null +++ b/app/src/main/res/drawable/ic_google.xml @@ -0,0 +1,4 @@ + + + + diff --git a/app/src/main/res/drawable/ic_gradient_black_24dp.xml b/app/src/main/res/drawable/ic_gradient_black_24dp.xml new file mode 100644 index 0000000..4761d5e --- /dev/null +++ b/app/src/main/res/drawable/ic_gradient_black_24dp.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_info_outline_black_24dp.xml b/app/src/main/res/drawable/ic_info_outline_black_24dp.xml new file mode 100644 index 0000000..ba951dc --- /dev/null +++ b/app/src/main/res/drawable/ic_info_outline_black_24dp.xml @@ -0,0 +1,21 @@ + + + + + diff --git a/app/src/main/res/drawable/ic_launcher_background.xml b/app/src/main/res/drawable/ic_launcher_background.xml new file mode 100644 index 0000000..d5fccc5 --- /dev/null +++ b/app/src/main/res/drawable/ic_launcher_background.xml @@ -0,0 +1,170 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/drawable/ic_layout.xml b/app/src/main/res/drawable/ic_layout.xml new file mode 100644 index 0000000..1f91125 --- /dev/null +++ b/app/src/main/res/drawable/ic_layout.xml @@ -0,0 +1,4 @@ + + + + diff --git a/app/src/main/res/drawable/ic_legacy.xml b/app/src/main/res/drawable/ic_legacy.xml new file mode 100644 index 0000000..3eb9100 --- /dev/null +++ b/app/src/main/res/drawable/ic_legacy.xml @@ -0,0 +1,4 @@ + + + + diff --git a/app/src/main/res/drawable/ic_search_24dp.xml b/app/src/main/res/drawable/ic_search_24dp.xml new file mode 100644 index 0000000..be5ad99 --- /dev/null +++ b/app/src/main/res/drawable/ic_search_24dp.xml @@ -0,0 +1,5 @@ + + + diff --git a/app/src/main/res/drawable/ic_send.xml b/app/src/main/res/drawable/ic_send.xml new file mode 100644 index 0000000..e5d35a7 --- /dev/null +++ b/app/src/main/res/drawable/ic_send.xml @@ -0,0 +1,4 @@ + + + + diff --git a/app/src/main/res/drawable/ic_share.xml b/app/src/main/res/drawable/ic_share.xml new file mode 100644 index 0000000..68fa1d8 --- /dev/null +++ b/app/src/main/res/drawable/ic_share.xml @@ -0,0 +1,4 @@ + + + + diff --git a/app/src/main/res/drawable/ic_text.xml b/app/src/main/res/drawable/ic_text.xml new file mode 100644 index 0000000..07a9950 --- /dev/null +++ b/app/src/main/res/drawable/ic_text.xml @@ -0,0 +1,4 @@ + + + + diff --git a/app/src/main/res/drawable/ic_widgets.xml b/app/src/main/res/drawable/ic_widgets.xml new file mode 100644 index 0000000..444be55 --- /dev/null +++ b/app/src/main/res/drawable/ic_widgets.xml @@ -0,0 +1,4 @@ + + + + diff --git a/app/src/main/res/drawable/side_nav_bar.xml b/app/src/main/res/drawable/side_nav_bar.xml new file mode 100644 index 0000000..6d81870 --- /dev/null +++ b/app/src/main/res/drawable/side_nav_bar.xml @@ -0,0 +1,9 @@ + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_code.xml b/app/src/main/res/layout/activity_code.xml new file mode 100644 index 0000000..196dc06 --- /dev/null +++ b/app/src/main/res/layout/activity_code.xml @@ -0,0 +1,129 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml new file mode 100644 index 0000000..a61d8a6 --- /dev/null +++ b/app/src/main/res/layout/activity_main.xml @@ -0,0 +1,25 @@ + + + + + + + + diff --git a/app/src/main/res/layout/activity_sheet.xml b/app/src/main/res/layout/activity_sheet.xml new file mode 100644 index 0000000..3bae3cd --- /dev/null +++ b/app/src/main/res/layout/activity_sheet.xml @@ -0,0 +1,29 @@ + + + + +