Android: Custom view from xml layout
17,098
you can use this in your xml just like any other view like <TextView
try <packageName.ClassName
ie something like <com.example.CustomView
Author by
Toast
Updated on June 04, 2022Comments
-
Toast almost 2 years
i would like to create a custom
View
(subclass of theView
class) and use a layout xml resource.I want 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 right height and width (aScrollView
with a list of those has exactly the expected length and scrollbars) but they are empty (black) even though the xml layout contains a lot ofTextViews
.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 the custom view to my main view:
Not working (what I try to achieve):
TweetView ctweet = new TweetView(getApplicationContext(),tweet); timeline.addView(ctweet);
My current solution (works, but uses no 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()); //tvtime.setText(ctweet.tvtime.getText()); timeline.addView(vtweet);
-
Toast almost 12 yearsHow can I use it to make a class out ouf it?