Je suis un plus récent sur la construction de l'application Android. Je veux ajouter une nouvelle "vue personnalisée", qui est composée de boutons et imageView, quand je clique sur le bouton dans MainActivity. J'ai suivi une partie de la liste des sites Web ci-dessous pour créer une vue personnalisée.Android: Comment ajouter dynamiquement une "vue personnalisée" dans une mise en page linéaire
javatechig developer.android.com
Ils fonctionnent parfaitement. Cependant, si je veux ajouter dynamiquement une vue personnalisée avec
sView sview = new sView(MainActivity.this);
rien ne se passe plus tard ...
Ou si je veux nouvelle vue personnalisée par
sView sview = new sView(MainActivity.this, attrs);
Où puis-je trouver et définir les attrs ????
Voici mon code, dans le MainActivity,
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
myDraw = (RelativeLayout) findViewById(R.id.myDraw);
btnAddRect = (Button) findViewById(R.id.btnAdd);
mfView = (sView) findViewById(R.id.draw);
btnAdd.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
SingleFingerView sFingerView = new sView(MainActivity.this);
myDraw.addView(sFingerView);
}
});
}
dans la vue personnalisée,
public class sView extends LinearLayout{
public sView(Context context) {
this(context, null, 0);
}
public sView(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
public sView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
this._1dp = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 1, context.getResources().getDisplayMetrics());
this.parseAttr(context, attrs);
View mRoot = View.inflate(context, R.layout.test_image_view, null);
addView(mRoot, -1, -1);
mView = (ImageView) mRoot.findViewById(R.id.view);
mPushView = (ImageView) mRoot.findViewById(R.id.pview);
mFirmView = (ImageView) mRoot.findViewById(R.id.fview);
mRemoveView = (ImageView) mRoot.findViewById(R.id.rview);
}
private void parseAttr(Context context, AttributeSet attrs) {
if (attrs == null) return;
TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.sView);
if (a != null) {
int n = a.getIndexCount();
for (int i = 0; i < n; i++) {
int attr = a.getIndex(i);
if (attr == R.styleable.sView_centerInParent) {
this.mCenterInParent = a.getBoolean(attr, true);
} ...
with some attributes set setting
}
}
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
setParamsForView(widthMeasureSpec, heightMeasureSpec); // some params are set here
}
et le fichier xml main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:pushtouch="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >
<TextView
android:id="@+id/tv_touch"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="abc"
android:singleLine="false"
/>
<Button
android:id="@+id/btnAdd"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:text="ADD IMAGE" />
<RelativeLayout
android:id="@+id/myDraw"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<com.example.sView
android:id="@+id/draw"
android:layout_width="match_parent"
android:layout_height="wrap_content"
pushtouch:centerInParent="true"
pushtouch:image="@drawable/image"
pushtouch:image_width="120dp"
pushtouch:image_height="100dp"
pushtouch:push_image="@drawable/p_btn"
pushtouch:push_image_width="50dp"
pushtouch:push_image_height="50dp"
pushtouch:firm_image="@drawable/ok"
pushtouch:firm_image_width="50dp"
pushtouch:firm_image_height="50dp"
pushtouch:remove_image="@drawable/remove"
pushtouch:remove_image_width="50dp"
pushtouch:remove_image_height="50dp"
android:scaleType="centerInside"
android:layout_alignLeft="@id/result"
android:layout_alignTop="@id/result"
android:layout_alignRight="@id/result"
android:layout_alignBottom="@id/result"
/>
</RelativeLayout>
</LinearLayout>
et correspondant voir t_view.xml
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/drawLayout"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<ImageView
android:id="@+id/view"
android:layout_width="200dp"
android:layout_height="200dp"
android:focusableInTouchMode="true"
android:focusable="true"/>
<ImageView
android:id="@+id/push_view"
android:layout_width="50dp"
android:layout_height="50dp"
android:clickable="true"
android:focusable="true"
android:focusableInTouchMode="true"
/>
<ImageView
android:id="@+id/firm_view"
android:layout_width="50dp"
android:layout_height="50dp"
android:clickable="true"
android:focusable="true"
android:focusableInTouchMode="true"
/>
<ImageView
android:id="@+id/remove_view"
android:layout_width="50dp"
android:layout_height="50dp"
android:clickable="true"
android:focusable="true"
android:focusableInTouchMode="true"
/>
</FrameLayout>
GRANDE réponse à la question! Merci beaucoup!! – Anthony