Declaring a custom android UI element using XML

The Android Developer Guide has a section called Building Custom Components. Unfortunately, the discussion of XML attributes only covers declaring the control inside the layout file and not actually handling the values inside the class initialisation. The steps are as follows: 1. Declare attributes in values\attrs.xml <?xml version=”1.0″ encoding=”utf-8″?> <resources> <declare-styleable name=”MyCustomView”> <attr name=”android:text”/> <attr … Read more

How do I align views at the bottom of the screen?

The modern way to do this is to have a ConstraintLayout and constrain the bottom of the view to the bottom of the ConstraintLayout with app:layout_constraintBottom_toBottomOf=”parent” The example below creates a FloatingActionButton that will be aligned to the end and the bottom of the screen. <android.support.constraint.ConstraintLayout xmlns:android=”http://schemas.android.com/apk/res/android” xmlns:app=”http://schemas.android.com/apk/res-auto” xmlns:tools=”http://schemas.android.com/tools” android:layout_height=”match_parent” android:layout_width=”match_parent”> <android.support.design.widget.FloatingActionButton android:layout_height=”wrap_content” android:layout_width=”wrap_content” app:layout_constraintBottom_toBottomOf=”parent” … Read more

How to create RecyclerView with multiple view types

Yes, it’s possible. Just implement getItemViewType(), and take care of the viewType parameter in onCreateViewHolder(). So you do something like: public class MyAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> { class ViewHolder0 extends RecyclerView.ViewHolder { … public ViewHolder0(View itemView){ … } } class ViewHolder2 extends RecyclerView.ViewHolder { … public ViewHolder2(View itemView){ … } @Override public int getItemViewType(int position) { … Read more

How do I update the GUI from another thread?

The simplest way is an anonymous method passed into Label.Invoke: // Running on the worker thread string newText = “abc”; form.Label.Invoke((MethodInvoker)delegate { // Running on the UI thread form.Label.Text = newText; }); // Back on the worker thread Notice that Invoke blocks execution until it completes–this is synchronous code. The question doesn’t ask about asynchronous … Read more

What are MVP and MVC and what is the difference?

Model-View-Presenter In MVP, the Presenter contains the UI business logic for the View. All invocations from the View delegate directly to the Presenter. The Presenter is also decoupled directly from the View and talks to it through an interface. This is to allow mocking of the View in a unit test. One common attribute of … Read more