A fully customizible spinner for picking results with display in a TextInputLayout
compile 'ro.bogdanmunteanu:custompicker:0.1.9'
Maven:
<dependency>
<groupId>ro.bogdanmunteanu</groupId>
<artifactId>custompicker</artifactId>
<version>0.1.9</version>
<type>pom</type>
</dependency>
Ivy:
<dependency org='ro.bogdanmunteanu' name='custompicker' rev='0.1.9'>
<artifact name='custompicker' ext='pom' ></artifact>
</dependency>
Latest version is 0.1.9
Nope. The minSDK version is API level 11 (Honeycomb).
Just put the component into your layout and start customizing it.
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<ro.bogdanmunteanu.custompicker.CustomPicker
android:id="@+id/customPicker"
android:layout_width="match_parent"
android:layout_height="wrap_content"
picker:resultsListHeight="200dp"
picker:resultsViewTextColor="@color/colorPrimaryDark"
picker:spinnerBackground="@color/colorPrimaryDark">
</ro.bogdanmunteanu.custompicker.CustomPicker>
</RelativeLayout>
Activity example :
The activity must implement PickerViewActions
public class MainActivity extends AppCompatActivity implements PickerViewActions {
CustomPicker<Planet> picker;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
picker = (CustomPicker<Planet>) findViewById(R.id.customPicker);
ArrayList<Planet> planets = new ArrayList<>();
planets.add(new Planet("Earth"));
planets.add(new Planet("Jupiter"));
planets.add(new Planet("Mars"));
planets.add(new Planet("Saturn"));
planets.add(new Planet("Pluto"));
PlanetAdapter planetAdapter = new PlanetAdapter(this.getApplicationContext(),planets);
picker.setAdapter(planetAdapter);
picker.setHint("Test");
}
@Override
public void onPickerExpanded(CustomPicker picker) {
//here you can put what do you want to happen on picker expanded , thinks like animations , hide other elements or so.
}
}
Adapter example :
The adapter must implement PickerActions
public class PlanetAdapter extends ArrayAdapter<Planet> implements PickerActions {
public PlanetAdapter(Context context, List<Planet> objects) {
super(context, 0, objects);
}
@NonNull
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// Get the data item for this position
Planet planet = getItem(position);
// Check if an existing view is being reused, otherwise inflate the view
if (convertView == null) {
convertView = LayoutInflater.from(getContext()).inflate(R.layout.adapter_item, parent, false);
}
// Lookup view for data population
TextView tvName = (TextView) convertView.findViewById(R.id.textView);
// Populate the data into the template view using the data object
tvName.setText(planet.getName());
// Return the completed view to render on screen
return convertView;
}
@Override
public boolean isValid(int position) {
return true;
}
@Override
public int getValidPosition(int position) {
return position;
}
@Override
public String getResultforItem(int position) {
return getItem(position).getName();
}
}
picker:resultsListHeight - set the spinner height. The list is scrollable, so don't worry if you have more elements in the spinner. Just make it look good
picker:resultsViewTextColor - if you want to set the text colour without using the android:theme attribute. That works also, don't worry.
picker:spinnerBackground - set the background color of the spinner
Feel free to create issues and pull requests. When creating pull requests, more is more: I'd like to see ten small pull requests separated by feature rather than all those combined into a huge one.
CustomPicker library for Android
Copyright (c) 2017 Bogdan Munteanu (http://github.com/bogdanmunteanu).
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.