I would like to create a custom View (a subclass of the View class) and use the xml layout resource.
I need something like this:
public class CustomView extends LinearLayout { public CustomView(Context context) { super(context); LayoutInflater mInflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); mInflater.inflate(R.layout.tweet, this, true); }
This actually creates a View with the correct height and width (a ScrollView , the list of which has exactly the expected length and scrollbars), but they are empty (black), although the xml layout contains many TextViews .
This is my xml layout:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/tweet" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:background="#ffffff"> <RelativeLayout android:layout_height="wrap_content" android:layout_width="match_parent"> <LinearLayout android:layout_height="wrap_content" android:layout_width="match_parent" android:orientation="horizontal" android:background="#ffffff"> <TextView android:text="User" android:id="@+id/tvusername" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="#000000" android:textStyle="bold"> </TextView> <View android:layout_width="5dip" android:layout_height="1dip"> </View> <TextView android:text="userscreenname" android:id="@+id/tvuserscreenname" android:layout_width="wrap_content" android:layout_height="wrap_content"> </TextView> </LinearLayout> <TextView android:text="0s" android:id="@+id/tvtime" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true"> </TextView> </RelativeLayout> <TextView android:text="Tweet Content" android:id="@+id/tvcontent" android:layout_width="match_parent" android:layout_height="wrap_content" android:textColor="#000000"> </TextView> <View android:layout_width="match_parent" android:layout_height="1px" android:background="#ffffff"> </View> <TextView android:text="Retweet by" android:id="@+id/tvrtby" android:layout_width="wrap_content" android:layout_height="wrap_content"> </TextView> </LinearLayout>
This is my main layout:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#ffffff" > <ScrollView android:layout_height="match_parent" android:layout_width="match_parent" android:id="@+id/scrollView1" android:orientation="vertical" android:layout_alignParentTop="true"> <LinearLayout android:layout_width="match_parent" android:id="@+id/timeline" android:layout_height="wrap_content" android:orientation="vertical" android:background="#ffffff"> <TextView android:id="@+id/tvoutput" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="@string/hello" /> </LinearLayout> </ScrollView> </LinearLayout>
This is how I add a custom view to my main view:
Doesn't work (what am I trying to achieve):
TweetView ctweet = new TweetView(getApplicationContext(),tweet); timeline.addView(ctweet);
My current solution (works, but doesn't use a custom view):
View vtweet = View.inflate(getApplicationContext(), R.layout.tweet,null); TextView tvusername = (TextView) vtweet.findViewById(R.id.tvusername); TextView tvuserscreenname = (TextView) vtweet.findViewById(R.id.tvuserscreenname); TextView tvcontent = (TextView) vtweet.findViewById(R.id.tvcontent); TextView tvtime = (TextView) vtweet.findViewById(R.id.tvtime); tvusername.setText(tweet.getUser().getName()); tvuserscreenname.setText('@' + tweet.getUser().getScreenName()); tvcontent.setText(tweet.getText());
Toast source share