Views
블록에 ImageView
, Button
및 TextView
이 포함되어 있습니다. Java
코드에서 동적으로이 블록을 만들고 싶습니다. 이 블록을 XML로 정의하고 src
/text
속성을 변경하고 현재 layout
에 추가하는 방법이 있습니까?Android - 동적으로 뷰 블록을 만들고 레이아웃에 추가
감사합니다.
론 나는 다음과 같은 기술을 사용
Views
블록에 ImageView
, Button
및 TextView
이 포함되어 있습니다. Java
코드에서 동적으로이 블록을 만들고 싶습니다. 이 블록을 XML로 정의하고 src
/text
속성을 변경하고 현재 layout
에 추가하는 방법이 있습니까?Android - 동적으로 뷰 블록을 만들고 레이아웃에 추가
감사합니다.
론 나는 다음과 같은 기술을 사용
: 사용 팽창 그런
<!-- content.xml -->
<merge>
<ImageView android:id="@+id/image />
<Button android:id="@+id/button />
<TextView android:id="@+id/text />
</merge>
을 LayoutInflater
:
View block = inflater.inflate(R.layout.content, root, attach);
(TextView) textView = (TextView) block.findViewById(R.id.text);
textView.setText(text);
사용자 정의가 View
ViewGroup
을 확장 쓸 때 나는이 특히 유용하다고 (예 : LinearLayout
또는 RelativeLayout
) 선언적 XML로 내용을 정의하려고합니다. 예를
public class MyWidget extends LinearLayout {
// Invoked by all of the constructors
private void setup() {
Context ctx = getContext();
inflate(ctx, R.layout.content, this);
((TextView) findViewById(R.id.text)).setText(
ctx.getString(R.string.hello_world)
);
}
}
에 대한 가능한 변화는 당신이 필요하지 않은 Layout
대신 <merge>
경우 사용하고 있습니다. LayoutInflater
는 Context
getSystemService()
를 통해 (당신이 후자의 경우에 LayoutInflater
객체에 결과를 캐스팅해야 Activity.getLayoutInflater()
또는 얻을 수 있습니다. 내가이를 사용하는 경우
내가 그것을 ... 시도 감사 : – Ron
을주지 블록 몇 번 ... 어떻게 ID를 통해 의견을 주소로 문제가되는 것을 피할 수 있습니까? id/image는 여러 번있을 것입니다. 실 거예요? – Ron
'id'는 뷰를 찾기위한 식별자입니다. 계층 구조 내에서 고유 할 필요도 없습니다. 두 개의보기가 동일한 ID를 가질 때 아무 것도 발생하지 않습니다. 유일한 문제는'View.findViewById (int)'를 호출하고 동일한 ID를 가진 두 개 이상의 뷰가 존재할 때입니다. 왜냐하면이 경우에는 찾고있는 것을 찾을 수 없기 때문입니다 ('setTag (Object) '). 그러나 inflator가 마지막으로 생성 된 계층 구조를 반환하고이 계층 구조에서'findViewById'를 호출 할 수 있고'content.xml'에서 중복 된 ID가 아닌 – Raffaele