anvil icon indicating copy to clipboard operation
anvil copied to clipboard

Handwritten setters that might be useful

Open zserge opened this issue 10 years ago • 8 comments

Currently Anvil contains lots of autogenerated bindings for all setters of all views in Android SDK, starting with "set" and having exactly one parameter (normally a value to set). Some setters are not covered - the ones that start with "add" (like addTextChangedListeer and the ones having more than a single parameter (like setLineSpacing).

As it was discussed previously in issue #15 - missing setters will be added if someone finds real need in them (most of them are really exotic), and makes a pull-request. The list of setters has been taken from the recent android.jar of API Level 23.

I suggest to split this in two phases:

  • If you find a missing setting really useful - mention it in the comments, and I will move it to the "TODO" task list.
  • If you want to implement one of the unimplemented setters from the task list please make a pull request, and I will mark the task as done.

TODO

  • [x] addTextChangedListener(TextWatcher) in TextView (implemented as text and onTextChanged bindings)
  • [x] setShadowLayer(float,float,float,int) in TextView
  • [x] setPadding(int,int,int,int) - implemented as 1, 2 or 4 parameter function
  • [x] setTag(int, Object) - beware, tag ID should be from R.id.something, not just a random number
  • [x] setTypeface(Typeface,int) inTextView
  • [x] check(int) in RadioGroup

Missing setters starting with "add", not "set"

  • addChildrenForAccessibility(ArrayList) : View
  • addFocusables(ArrayList,int) : View
  • addFocusables(ArrayList,int,int) : View
  • addFooterView(View) : ListView
  • addFooterView(View,Object,boolean) : ListView
  • addHeaderView(View) : ListView
  • addHeaderView(View,Object,boolean) : ListView
  • addJavascriptInterface(Object,String) : WebView
  • addOnAttachStateChangeListener(View$OnAttachStateChangeListener) : View
  • addOnGestureListener(GestureOverlayView$OnGestureListener) : GestureOverlayView
  • addOnGesturePerformedListener(GestureOverlayView$OnGesturePerformedListener) : GestureOverlayView
  • addOnGesturingListener(GestureOverlayView$OnGesturingListener) : GestureOverlayView
  • addOnLayoutChangeListener(View$OnLayoutChangeListener) : View
  • addSubtitleSource(InputStream,MediaFormat) : VideoView
  • addTab(TabHost$TabSpec) : TabHost
  • addTouchables(ArrayList) : View

Missing setters with more than one parameter

  • setAppWidget(int,android.appwidget.AppWidgetProviderInfo) : AppWidgetHostView
  • setChildIndicatorBounds(int,int) : ExpandableListView
  • setChildIndicatorBoundsRelative(int,int) : ExpandableListView
  • setColorFilter(int,PorterDuff$Mode) : ImageView
  • setColumnCollapsed(int,boolean) : TableLayout
  • setColumnShrinkable(int,boolean) : TableLayout
  • setColumnStretchable(int,boolean) : TableLayout
  • setCompoundDrawables(Drawable,Drawable,Drawable,Drawable) : TextView
  • setCompoundDrawablesRelative(Drawable,Drawable,Drawable,Drawable) : TextView
  • setCompoundDrawablesRelativeWithIntrinsicBounds(Drawable,Drawable,Drawable,Drawable) : TextView
  • setCompoundDrawablesRelativeWithIntrinsicBounds(int,int,int,int) : TextView
  • setCompoundDrawablesWithIntrinsicBounds(Drawable,Drawable,Drawable,Drawable) : TextView
  • setCompoundDrawablesWithIntrinsicBounds(int,int,int,int) : TextView
  • setContentInsetsAbsolute(int,int) : Toolbar
  • setContentInsetsRelative(int,int) : Toolbar
  • setDate(long,boolean,boolean) : CalendarView
  • setEGLConfigChooser(int,int,int,int,int,int) : GLSurfaceView
  • setError(CharSequence,Drawable) : TextView
  • setHttpAuthUsernamePassword(String,String,String,String) : WebView
  • setImageState(int[],boolean) : ImageView
  • setImeActionLabel(CharSequence,int) : TextView
  • setInAnimation(Context,int) : AdapterViewAnimator
  • setInAnimation(Context,int) : ViewAnimator
  • setIndicatorBounds(int,int) : ExpandableListView
  • setIndicatorBoundsRelative(int,int) : ExpandableListView
  • setInputExtras(int) throws org.xmlpull.v1.XmlPullParserException,java.io.IOException : TextView
  • setInterpolator(Context,int) : ProgressBar
  • setItemChecked(int,boolean) : AbsListView
  • setLayerType(int,Paint) : TextureView
  • setLayerType(int,Paint) : View
  • setLayerType(int,Paint) : WebView
  • setLineSpacing(float,float) : TextView
  • setOutAnimation(Context,int) : AdapterViewAnimator
  • setOutAnimation(Context,int) : ViewAnimator
  • setPaddingRelative(int,int,int,int) : TextView
  • setPaddingRelative(int,int,int,int) : View
  • setParentTitle(CharSequence,CharSequence,View$OnClickListener) : FragmentBreadCrumbs
  • setPopupOffset(int,int) : KeyboardView
  • setPrevNextListeners(View$OnClickListener,View$OnClickListener) : MediaController
  • setQuery(CharSequence,boolean) : SearchView
  • setScrollIndicators(View,View) : AbsListView
  • setScrollIndicators(int,int) : View
  • setSelectedChild(int,int,boolean) : ExpandableListView
  • setSelection(int,boolean) : AbsSpinner
  • setSelection(int,int) : EditText
  • setSelectionFromTop(int,int) : AbsListView
  • setSubtitleTextAppearance(Context,int) : Toolbar
  • setSwitchTextAppearance(Context,int) : Switch
  • setSwitchTypeface(Typeface,int) : Switch
  • setText(CharSequence,TextView$BufferType) : EditText
  • setText(CharSequence,TextView$BufferType) : TextView
  • setText(CharSequence,boolean) : AutoCompleteTextView
  • setText(char[],int,int) : TextView
  • setText(int,TextView$BufferType) : TextView
  • setTextAppearance(Context,int) : TextView
  • setTextKeepState(CharSequence,TextView$BufferType) : TextView
  • setTextSize(int,float) : TextView
  • setTitle(CharSequence,CharSequence) : FragmentBreadCrumbs
  • setTitleTextAppearance(Context,int) : Toolbar
  • setVideoURI(Uri,Map) : VideoView

zserge avatar Oct 04 '15 10:10 zserge

I'd like to nominate setTypeface(Typeface,int) for manual implementation. It's the easiest way to style text in italics or underlined, and I use that in a few places.

I'm happy to put together a PR if that would be helpful.

corbt avatar Oct 24 '15 22:10 corbt

Sure, a PR for such a function is more than welcome!

zserge avatar Oct 24 '15 22:10 zserge

Hi, I just create PR https://github.com/zserge/anvil/pull/71 implementing setters for compound drawable for TextView (and so for many subclasses). But I have question: there are 3 more setters (setCompoundDrawablesRelative*) which was introduced in API 17. How to implement them if minimal API for BaseDSL is 15?

LukasVykuka avatar May 26 '16 10:05 LukasVykuka

@LukasVykuka if I understand it correctly, you can just wrap actual methods with if (Build.VERSION.SDK_INT >= 17) ... so they won't be called on older API levels. On the other hand I'd prefer to keep BaseDSL small, so I wonder how these Relative variants are different from just setCompoundDrawable (sorry, I'm asking because the documentation looks identical).

zserge avatar May 26 '16 10:05 zserge

Relative version place drawable dependently on direction of text of current Locale. Some languages are writen from right to left (https://en.wikipedia.org/wiki/Right-to-left) so if I set drawable to "start" position than it will be showed on left in normal language and on right in, e. g., in arabic language. Non-relative version place drawable absolute, independently on laguage.

I'm happy with this methods so far.

LukasVykuka avatar May 26 '16 10:05 LukasVykuka

@LukasVykuka Ah, I see. I'd either leave it as it is now, or implemented via SDK_INT check so that on pre-17 devices it was calling setCompoundDrawable, but on newer devices would call a better alternative to respect the RTL languages (I believe that's what android:drawableLeft etc do in XML)

zserge avatar May 26 '16 10:05 zserge

I think that there should be both versions (relative and non-relative) even for API >=17 because sometimes it will be appropriate to place drawable on some side independently on text direction.

But I agree, leave it as it is now :)

Oh btw is the best lib I have found in my 3 year Android developer life! Thank you :+1:

LukasVykuka avatar May 26 '16 11:05 LukasVykuka

I'm missing "TextInputLayout.setPasswordVisibilityToggleEnabled(boolean enabled)" in the Design library. But so far I'm loving everything about anvil!

ElectricCookie avatar Aug 25 '16 14:08 ElectricCookie