├── .gitignore ├── sample ├── .gitignore ├── src │ └── main │ │ ├── res │ │ ├── mipmap-hdpi │ │ │ └── ic_launcher.png │ │ ├── mipmap-mdpi │ │ │ └── ic_launcher.png │ │ ├── mipmap-xhdpi │ │ │ └── ic_launcher.png │ │ ├── mipmap-xxhdpi │ │ │ └── ic_launcher.png │ │ ├── values │ │ │ ├── colors.xml │ │ │ ├── strings.xml │ │ │ ├── dimens.xml │ │ │ └── styles.xml │ │ ├── values-w820dp │ │ │ └── dimens.xml │ │ ├── values-v21 │ │ │ └── styles.xml │ │ ├── drawable │ │ │ └── settings_box.xml │ │ ├── xml │ │ │ ├── pref_general.xml │ │ │ └── pref_general_compat.xml │ │ └── layout │ │ │ └── view_demo.xml │ │ ├── AndroidManifest.xml │ │ └── java │ │ └── com │ │ └── pavelsikun │ │ └── seekbarpreference │ │ └── sample │ │ ├── ExamplePreferenceActivity.java │ │ ├── ExamplePreferenceCompatActivity.java │ │ └── ExampleViewActivity.java ├── proguard-rules.pro └── build.gradle ├── library ├── .gitignore ├── src │ └── main │ │ ├── AndroidManifest.xml │ │ ├── res │ │ ├── values │ │ │ ├── dimens.xml │ │ │ ├── colors.xml │ │ │ ├── strings.xml │ │ │ ├── styles.xml │ │ │ └── attrs.xml │ │ ├── values-w320dp │ │ │ └── dimens.xml │ │ ├── values-w400dp │ │ │ └── dimens.xml │ │ ├── values-w480dp │ │ │ └── dimens.xml │ │ ├── values-w600dp │ │ │ └── dimens.xml │ │ ├── values-w720dp │ │ │ └── dimens.xml │ │ ├── drawable │ │ │ ├── msbp_bottom_line_enabled.xml │ │ │ ├── msbp_bottom_line_disabled.xml │ │ │ ├── msbp_bottom_line.xml │ │ │ └── msbp_math_compass.xml │ │ └── layout │ │ │ ├── seekbar_view_layout.xml │ │ │ └── value_selector_dialog.xml │ │ └── java │ │ └── com │ │ └── pavelsikun │ │ └── seekbarpreference │ │ ├── ChangeValueListener.java │ │ ├── PersistValueListener.java │ │ ├── SeekBarPreference.java │ │ ├── SeekBarPreferenceView.java │ │ ├── SeekBarPreferenceCompat.java │ │ ├── CustomValueDialog.java │ │ └── PreferenceControllerDelegate.java ├── proguard-rules.pro └── build.gradle ├── settings.gradle ├── ART ├── screen_2.jpg ├── screen_3.jpg └── screen_4.jpg └── README.md /.gitignore: -------------------------------------------------------------------------------- 1 | .idea 2 | -------------------------------------------------------------------------------- /sample/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | sample.iml 3 | -------------------------------------------------------------------------------- /library/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | library.iml 3 | -------------------------------------------------------------------------------- /settings.gradle: -------------------------------------------------------------------------------- 1 | include ':library', ':sample' 2 | -------------------------------------------------------------------------------- /ART/screen_2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/green-green-avk/MaterialSeekBarPreference/master/ART/screen_2.jpg -------------------------------------------------------------------------------- /ART/screen_3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/green-green-avk/MaterialSeekBarPreference/master/ART/screen_3.jpg -------------------------------------------------------------------------------- /ART/screen_4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/green-green-avk/MaterialSeekBarPreference/master/ART/screen_4.jpg -------------------------------------------------------------------------------- /library/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /library/src/main/res/values/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 160dp 4 | -------------------------------------------------------------------------------- /library/src/main/res/values-w320dp/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 200dp 4 | -------------------------------------------------------------------------------- /library/src/main/res/values-w400dp/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 268dp 4 | -------------------------------------------------------------------------------- /library/src/main/res/values-w480dp/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 412dp 4 | -------------------------------------------------------------------------------- /library/src/main/res/values-w600dp/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 520dp 4 | -------------------------------------------------------------------------------- /library/src/main/res/values-w720dp/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 640dp 4 | -------------------------------------------------------------------------------- /sample/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/green-green-avk/MaterialSeekBarPreference/master/sample/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /sample/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/green-green-avk/MaterialSeekBarPreference/master/sample/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /sample/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/green-green-avk/MaterialSeekBarPreference/master/sample/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /sample/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/green-green-avk/MaterialSeekBarPreference/master/sample/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /library/src/main/java/com/pavelsikun/seekbarpreference/ChangeValueListener.java: -------------------------------------------------------------------------------- 1 | package com.pavelsikun.seekbarpreference; 2 | 3 | public interface ChangeValueListener { 4 | boolean onChange(int value); 5 | } 6 | -------------------------------------------------------------------------------- /library/src/main/res/drawable/msbp_bottom_line_enabled.xml: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /library/src/main/res/drawable/msbp_bottom_line_disabled.xml: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /sample/src/main/res/values/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #ca3a4b 4 | #ff862732 5 | #5E35B1 6 | -------------------------------------------------------------------------------- /sample/src/main/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | Hello world! 3 | Settings 4 | SeekBarPreference Lib Sample :D 5 | 6 | -------------------------------------------------------------------------------- /library/src/main/java/com/pavelsikun/seekbarpreference/PersistValueListener.java: -------------------------------------------------------------------------------- 1 | package com.pavelsikun.seekbarpreference; 2 | 3 | /** 4 | * Created by Pavel Sikun on 21.05.16. 5 | */ 6 | 7 | public interface PersistValueListener { 8 | boolean persistInt(int value); 9 | } -------------------------------------------------------------------------------- /sample/src/main/res/values/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 16dp 4 | 16dp 5 | 16dp 6 | 7 | -------------------------------------------------------------------------------- /library/src/main/res/values/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | #BDBDBD 5 | #EEEEEE 6 | 7 | #607D8B 8 | 9 | -------------------------------------------------------------------------------- /library/src/main/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | Must be between 4 | And 5 | Enter custom value 6 | apply 7 | -------------------------------------------------------------------------------- /library/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 7 | -------------------------------------------------------------------------------- /library/src/main/res/drawable/msbp_bottom_line.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | -------------------------------------------------------------------------------- /sample/src/main/res/values-w820dp/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 64dp 6 | 7 | -------------------------------------------------------------------------------- /sample/src/main/res/values-v21/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 11 | 12 | 15 | 19 | 20 | 27 | 28 | -------------------------------------------------------------------------------- /sample/src/main/res/drawable/settings_box.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | -------------------------------------------------------------------------------- /sample/src/main/java/com/pavelsikun/seekbarpreference/sample/ExamplePreferenceActivity.java: -------------------------------------------------------------------------------- 1 | package com.pavelsikun.seekbarpreference.sample; 2 | 3 | import android.annotation.TargetApi; 4 | import android.os.Build; 5 | import android.os.Bundle; 6 | import android.preference.PreferenceFragment; 7 | import android.support.v7.app.ActionBar; 8 | import android.support.v7.app.AppCompatActivity; 9 | import android.view.MenuItem; 10 | import android.view.View; 11 | import com.pavelsikun.seekbarpreference.SeekBarPreference; 12 | 13 | /** 14 | * Created by mrbimc on 02.04.16. 15 | */ 16 | 17 | @TargetApi(Build.VERSION_CODES.HONEYCOMB) 18 | public class ExamplePreferenceActivity extends AppCompatActivity { 19 | 20 | @Override 21 | protected void onCreate(Bundle savedInstanceState) { 22 | super.onCreate(savedInstanceState); 23 | getFragmentManager() 24 | .beginTransaction() 25 | .replace(android.R.id.content, new PreferencesScreen()) 26 | .commit(); 27 | 28 | ActionBar toolbar = getSupportActionBar(); 29 | if(toolbar != null) { 30 | toolbar.setDisplayHomeAsUpEnabled(true); 31 | } 32 | } 33 | 34 | @Override 35 | public boolean onOptionsItemSelected(MenuItem item) { 36 | if(item.getItemId() == android.R.id.home) { 37 | onBackPressed(); 38 | } 39 | return super.onOptionsItemSelected(item); 40 | } 41 | 42 | public static class PreferencesScreen extends PreferenceFragment { 43 | public void onCreate(Bundle savedInstanceState) { 44 | super.onCreate(savedInstanceState); 45 | addPreferencesFromResource(R.xml.pref_general); 46 | } 47 | 48 | @Override 49 | public void onViewCreated(View view, Bundle savedInstanceState) { 50 | super.onViewCreated(view, savedInstanceState); 51 | 52 | SeekBarPreference pref = new SeekBarPreference(getActivity()); 53 | pref.setTitle("Dynamic Preference"); 54 | pref.setSummary("This one was added from Java"); 55 | pref.setMinValue(222); 56 | pref.setMaxValue(999); 57 | pref.setCurrentValue(444); 58 | pref.setMeasurementUnit("nectarines"); 59 | 60 | getPreferenceScreen().addPreference(pref); 61 | } 62 | 63 | 64 | } 65 | } 66 | -------------------------------------------------------------------------------- /sample/src/main/res/xml/pref_general.xml: -------------------------------------------------------------------------------- 1 | 3 | 4 | 13 | 14 | 22 | 23 | 32 | 33 | 44 | 45 | 56 | 57 | 63 | 64 | 75 | 76 | -------------------------------------------------------------------------------- /sample/src/main/java/com/pavelsikun/seekbarpreference/sample/ExamplePreferenceCompatActivity.java: -------------------------------------------------------------------------------- 1 | package com.pavelsikun.seekbarpreference.sample; 2 | 3 | import android.os.Bundle; 4 | import android.support.v7.preference.PreferenceFragmentCompat; 5 | import android.support.v7.app.ActionBar; 6 | import android.support.v7.app.AppCompatActivity; 7 | import android.view.MenuItem; 8 | import android.view.View; 9 | 10 | import com.pavelsikun.seekbarpreference.SeekBarPreferenceCompat; 11 | 12 | /** 13 | * Created by mrbimc on 02.04.16. 14 | */ 15 | 16 | public class ExamplePreferenceCompatActivity extends AppCompatActivity { 17 | 18 | @Override 19 | protected void onCreate(Bundle savedInstanceState) { 20 | super.onCreate(savedInstanceState); 21 | getSupportFragmentManager() 22 | .beginTransaction() 23 | .replace(android.R.id.content, new PreferencesScreen()) 24 | .commit(); 25 | 26 | ActionBar toolbar = getSupportActionBar(); 27 | if(toolbar != null) { 28 | toolbar.setDisplayHomeAsUpEnabled(true); 29 | } 30 | } 31 | 32 | @Override 33 | public boolean onOptionsItemSelected(MenuItem item) { 34 | if(item.getItemId() == android.R.id.home) { 35 | onBackPressed(); 36 | } 37 | return super.onOptionsItemSelected(item); 38 | } 39 | 40 | public static class PreferencesScreen extends PreferenceFragmentCompat { 41 | 42 | //I also recommend you to use some 3rd-party lib to style PreferenceFragmentCompat 43 | //because by default v7 prefs don't respect device theme and look ugly, 44 | //even on v21+(thought afaik since v23.4.0 look on lollipop+ was fixed) 45 | 46 | //theoretically useful links: 47 | // * http://stackoverflow.com/questions/32070670/preferencefragmentcompat-requires-preferencetheme-to-be-set 48 | // * https://github.com/consp1racy/android-support-preference 49 | 50 | @Override 51 | public void onViewCreated(View view, Bundle savedInstanceState) { 52 | super.onViewCreated(view, savedInstanceState); 53 | 54 | SeekBarPreferenceCompat pref = new SeekBarPreferenceCompat(getActivity()); 55 | pref.setTitle("Dynamic PreferenceCompat Example"); 56 | pref.setSummary("This one was added from Java"); 57 | pref.setMinValue(222); 58 | pref.setMaxValue(999); 59 | pref.setCurrentValue(444); 60 | pref.setMeasurementUnit("nectarines"); 61 | 62 | getPreferenceScreen().addPreference(pref); 63 | } 64 | 65 | @Override 66 | public void onCreatePreferences(Bundle bundle, String s) { 67 | addPreferencesFromResource(R.xml.pref_general_compat); // load your SeekBarPreferenceCompat prefs from xml 68 | } 69 | } 70 | } 71 | -------------------------------------------------------------------------------- /sample/src/main/res/xml/pref_general_compat.xml: -------------------------------------------------------------------------------- 1 | 3 | 4 | 13 | 14 | 22 | 23 | 32 | 33 | 44 | 45 | 56 | 57 | 63 | 64 | 75 | 76 | -------------------------------------------------------------------------------- /library/src/main/res/layout/seekbar_view_layout.xml: -------------------------------------------------------------------------------- 1 | 2 | 9 | 10 | 20 | 21 | 29 | 30 | 34 | 35 | 41 | 42 | 54 | 55 | 59 | 64 | 72 | 80 | 81 | 82 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | -------------------------------------------------------------------------------- /library/src/main/res/layout/value_selector_dialog.xml: -------------------------------------------------------------------------------- 1 | 6 | 7 | 14 | 15 | 21 | 22 | 31 | 32 | 33 | 40 | 47 | 48 | 55 | 56 | 64 | 65 | 72 | 73 | 80 | 81 | 82 | 87 | 88 |