diff --git a/.gitignore b/.gitignore index 39fb081..83a2122 100644 --- a/.gitignore +++ b/.gitignore @@ -7,3 +7,6 @@ /build /captures .externalNativeBuild + +.idea/instapk.xml +instapk.log* \ No newline at end of file diff --git a/.hgignore b/.hgignore new file mode 100644 index 0000000..609e7c3 --- /dev/null +++ b/.hgignore @@ -0,0 +1,3 @@ + +.idea/instapk.xml +instapk.log* \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml index 1caa136..3963879 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -1,8 +1,5 @@ - - - - - - - - - - - - - - + diff --git a/AwesomeSpinner/build.gradle b/AwesomeSpinner/build.gradle index c068a10..1b128dd 100644 --- a/AwesomeSpinner/build.gradle +++ b/AwesomeSpinner/build.gradle @@ -2,13 +2,13 @@ apply plugin: 'com.android.library' android { compileSdkVersion 25 - buildToolsVersion "25.0.3" + buildToolsVersion '26.0.2' defaultConfig { minSdkVersion 14 targetSdkVersion 25 versionCode 1 - versionName "1.0" + versionName "1.1.0" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" @@ -22,10 +22,6 @@ android { } dependencies { - compile fileTree(dir: 'libs', include: ['*.jar']) - androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', { - exclude group: 'com.android.support', module: 'support-annotations' - }) - compile 'com.android.support:appcompat-v7:25.3.1' + compile 'com.android.support:appcompat-v7:25.4.0' testCompile 'junit:junit:4.12' } diff --git a/AwesomeSpinner/src/main/java/com/isapanah/awesomespinner/AwesomeSpinner.java b/AwesomeSpinner/src/main/java/com/isapanah/awesomespinner/AwesomeSpinner.java index 206b10f..45f2c91 100644 --- a/AwesomeSpinner/src/main/java/com/isapanah/awesomespinner/AwesomeSpinner.java +++ b/AwesomeSpinner/src/main/java/com/isapanah/awesomespinner/AwesomeSpinner.java @@ -14,6 +14,7 @@ import android.widget.ArrayAdapter; import android.widget.ImageView; import android.widget.RelativeLayout; +import android.widget.TextView; /** * Created by sadra on 5/26/17. @@ -108,16 +109,17 @@ private void initiateSpinnerString(){ _spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView parent, View view, int position, long id) { + Log.d(TAG, "position selected: " + position); if (AwesomeSpinner.this._callback == null) { throw new IllegalStateException("callback cannot be null"); } if(_allowToSelect){ + _isSelected = true; Object item = AwesomeSpinner.this._spinner.getItemAtPosition(position); AwesomeSpinner.this._callback.onItemSelected(position, (String) item); _hintButton.setText(_spinner.getSelectedItem().toString()); - _hintButton.setTextColor(Color.BLACK); - _isSelected = true; + setHitButtonStyle(); } _allowToSelect = true; @@ -141,16 +143,17 @@ private void initiateSpinnerCharSequence(){ _spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView parent, View view, int position, long id) { + Log.d(TAG, "position selected: " + position); if (AwesomeSpinner.this._callback == null) { throw new IllegalStateException("callback cannot be null"); } if(_allowToSelect){ + _isSelected = true; Object item = AwesomeSpinner.this._spinner.getItemAtPosition(position); AwesomeSpinner.this._callback.onItemSelected(position, (String) item); _hintButton.setText(_spinner.getSelectedItem().toString()); - _hintButton.setTextColor(Color.BLACK); - _isSelected = true; + setHitButtonStyle(); } _allowToSelect = true; @@ -233,5 +236,19 @@ public interface onSpinnerItemClickListener { void onItemSelected(int position, T itemAtPosition); } + public void setSpinnerEnable(boolean enable){ + this._spinner.setEnabled(enable); + this._hintButton.setEnabled(enable); + this._downArrow.setAlpha(enable ? 1.0f : 0.6f); + setHitButtonStyle(); + } + + public boolean isSpinnerEnable(){ + return this._spinner.isEnabled(); + } + + private void setHitButtonStyle(){ + this._hintButton.setTextColor(this._hintButton.isEnabled() ? Color.BLACK : Color.parseColor("#BDBDBD")); + } } diff --git a/AwesomeSpinner/src/main/res/color/spinner_list_item_selector.xml b/AwesomeSpinner/src/main/res/color/spinner_list_item_selector.xml new file mode 100644 index 0000000..e43a025 --- /dev/null +++ b/AwesomeSpinner/src/main/res/color/spinner_list_item_selector.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/AwesomeSpinner/src/main/res/layout/spinner_list_item.xml b/AwesomeSpinner/src/main/res/layout/spinner_list_item.xml index 16f9d98..3218031 100644 --- a/AwesomeSpinner/src/main/res/layout/spinner_list_item.xml +++ b/AwesomeSpinner/src/main/res/layout/spinner_list_item.xml @@ -11,4 +11,5 @@ android:layout_height="wrap_content" android:ellipsize="marquee" android:textAlignment="inherit" + android:textColor="@color/spinner_list_item_selector" android:textAllCaps="false"/> diff --git a/README.md b/README.md index 925a661..e192bfc 100644 --- a/README.md +++ b/README.md @@ -25,7 +25,7 @@ allprojects { **Step 2.** Add the dependency: ```groovy -compile 'com.github.amlashi-sadra:AwesomeSpinner:1.0.7' +implementation 'com.github.sadra:AwesomeSpinner:1.1.0' ``` ## How To Use @@ -87,10 +87,12 @@ there is some controls for your spinner: | Control | Requierement | Info | | :------------- |:-------------:| :-----| -| getSelectedItem() | - | result = `String`: returns the selected item | -| isSelected() | - | result = `boolean`: returns **true** if any item selected, and vice versa | -| setSelection(NUMBER) | `int` position | you should pass the **position of item** to select the item programatically | -| setSelection(TEXT) | `String` value | you should pass the **item value** to select the item programatically | +| getSelectedItem() | - | Result = `String`: Returns the selected item | +| isSelected() | - | Result = `boolean`: Returns **true** if any item selected, and vice versa | +| setSelection(NUMBER) | `int` position | You should pass the **position of item** to select the item programatically | +| setSelection(TEXT) | `String` value | You should pass the **item value** to select the item programatically | +| setSpinnerEnable(BOOLEAN); | `Boolean` value | If you want enable or disable the spinner, you should call this method. | +| isSpinnerEnable(); | - | Result = `boolean`: Returns **true** if the spinner is enabled, and vice versa | You can see the [EXAMPLE PROJECT](https://github.com/amlashi-sadra/AwesomeSpinner/tree/master/app/src/main) for more infromation. diff --git a/app/build.gradle b/app/build.gradle index fba0d04..9861c79 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -8,13 +8,17 @@ allprojects { android { compileSdkVersion 25 - buildToolsVersion "25.0.3" + buildToolsVersion '26.0.2' + dexOptions { + preDexLibraries = false + javaMaxHeapSize "4g" + } defaultConfig { applicationId "com.isapanah.awsomespinnerexample" minSdkVersion 14 targetSdkVersion 25 versionCode 1 - versionName "1.0" + versionName "1.0.8" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" } buildTypes { @@ -26,11 +30,6 @@ android { } dependencies { - compile fileTree(include: ['*.jar'], dir: 'libs') - androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', { - exclude group: 'com.android.support', module: 'support-annotations' - }) - compile 'com.github.amlashi-sadra:AwesomeSpinner:1.0.7' - compile 'com.android.support:design:25.3.1' - testCompile 'junit:junit:4.12' + compile 'com.android.support:design:25.4.0' + implementation 'com.github.sadra:AwesomeSpinner:1.1.0' } \ No newline at end of file diff --git a/app/src/main/java/com/isapanah/awsomespinnerexample/MainActivity.java b/app/src/main/java/com/isapanah/awsomespinnerexample/MainActivity.java index dcb4898..64347b1 100644 --- a/app/src/main/java/com/isapanah/awsomespinnerexample/MainActivity.java +++ b/app/src/main/java/com/isapanah/awsomespinnerexample/MainActivity.java @@ -1,6 +1,7 @@ package com.isapanah.awsomespinnerexample; import android.os.Bundle; +import android.os.Handler; import android.support.design.widget.FloatingActionButton; import android.support.design.widget.Snackbar; import android.support.v7.app.AppCompatActivity; @@ -8,6 +9,7 @@ import android.util.Log; import android.view.View; import android.widget.ArrayAdapter; +import android.widget.TextView; import android.widget.Toast; import com.isapanah.awesomespinner.AwesomeSpinner; @@ -31,14 +33,13 @@ protected void onCreate(Bundle savedInstanceState) { spinnerRTL = (AwesomeSpinner) findViewById(R.id.awesomeSpinner_example_rtl); spinnerLTR = (AwesomeSpinner) findViewById(R.id.awesomeSpinner_example_ltr); - //Initialize the Adapter and spinnerRTL listener ArrayAdapter provincesAdapter = ArrayAdapter.createFromResource(this, R.array.iran_provinces, android.R.layout.simple_spinner_item); spinnerRTL.setAdapter(provincesAdapter, 0); spinnerRTL.setOnSpinnerItemClickListener(new AwesomeSpinner.onSpinnerItemClickListener() { @Override public void onItemSelected(int position, String itemAtPosition) { - Toast.makeText(getApplicationContext(), "Position: "+position+" | Item: "+itemAtPosition, Toast.LENGTH_LONG).show(); + Toast.makeText(getApplicationContext(), "Position: "+position+" | Item: "+itemAtPosition+" | isSelected:"+spinnerLTR.isSelected(), Toast.LENGTH_LONG).show(); } }); @@ -57,10 +58,21 @@ public void onItemSelected(int position, String itemAtPosition) { spinnerLTR.setOnSpinnerItemClickListener(new AwesomeSpinner.onSpinnerItemClickListener() { @Override public void onItemSelected(int position, String itemAtPosition) { - Toast.makeText(getApplicationContext(), "Position: "+position+" | Item: "+itemAtPosition, Toast.LENGTH_LONG).show(); + Toast.makeText(getApplicationContext(), "Position: "+position+" | Item: "+itemAtPosition+" | isSelected:"+spinnerLTR.isSelected(), Toast.LENGTH_LONG).show(); } }); + new Handler().postDelayed(new Runnable() { + public void run() { + runOnUiThread(new Runnable() { + @Override + public void run() { + spinnerLTR.setSelection(2); + } + }); + } + }, 100); + FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); fab.setOnClickListener(new View.OnClickListener() { @@ -76,10 +88,27 @@ public void onClick(View view) { .setAction("OK", null).show(); } + } + }); + + final TextView disable_spinners = (TextView) findViewById(R.id.disable_spinners); + disable_spinners.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if(spinnerLTR.isSpinnerEnable()){ + spinnerLTR.setSpinnerEnable(false); + spinnerRTL.setSpinnerEnable(false); + disable_spinners.setText("Enable Spinners"); + }else{ + spinnerLTR.setSpinnerEnable(true); + spinnerRTL.setSpinnerEnable(true); + disable_spinners.setText("Disable Spinners"); + } } }); + } } diff --git a/app/src/main/res/layout/content_main.xml b/app/src/main/res/layout/content_main.xml index 0720efe..352db3f 100644 --- a/app/src/main/res/layout/content_main.xml +++ b/app/src/main/res/layout/content_main.xml @@ -52,4 +52,14 @@ app:spinnerDirection="ltr" app:spinnerHint="Select a category" /> + +