android 从线性布局获取子视图
android get childview from Linearlayout
我尝试创建我自己的 PinView.i 创建它但我有一个 problem.i 试图解释我的问题
我创建了四个文本视图并将其添加到 Linearlayout 中,这个线性布局添加了我的容器(布局 我有我的 xml 文件)。现在我想从我的 fontainer.this 中获取我的子视图是一个结构我的观点
<container>
<wapContainer>
<Textview>
</Textview>
</wapContainer>
<container>
这是我的来源
private void addView( final LinearLayout childView) {
// Add a digit view for each digit
inputValue.setBackgroundColor(getResources().getColor(android.R.color.transparent));
inputValue.setTextColor(getResources().getColor(android.R.color.transparent));
inputValue.setCursorVisible(false);
inputValue.setFilters(new InputFilter[]{new InputFilter.LengthFilter(mDigits)});
inputValue.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_VARIATION_PASSWORD);
inputValue.setImeOptions(EditorInfo.IME_FLAG_NO_EXTRACT_UI);
inputValue.setOnFocusChangeListener(new OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
// Update the selected state of the views
int length = inputValue.getText().length();
for (int i = 0; i < mDigits; i++) {
childView.getChildAt(i).setSelected(hasFocus && (mAccentType == ACCENT_ALL ||
(mAccentType == ACCENT_CHARACTER && (i == length ||
(i == mDigits - 1 && length == mDigits)))));
}
if (mOnFocusChangeListener != null) {
mOnFocusChangeListener.onFocusChange(CustomPinConfirmView.this, hasFocus);
}
}
});
for (int i = 0; i < mDigits; i++) {
DigitView digitView = new DigitView(getContext());
digitView.setLayoutParams(new LinearLayout.LayoutParams(valueInPixels, valueInPixels));
wapContainer = new LinearLayout(mContext);
wapContainer.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT, 5f / mDigits));
wapContainer.setGravity(Gravity.CENTER);
digitView.setTextColor(Color.WHITE);
digitView.setTextSize(pxFromDp(14, mContext));
digitView.setGravity(Gravity.CENTER);
mWidgets.add(digitView);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
digitView.setElevation(mDigitElevation);
}
wapContainer.addView(digitView);
childView.addView(wapContainer);
}
inputValue.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s) {
int length = s.length();
for (int i = 0; i < mDigits; i++) {
if (s.length() > i) {
String mask = mMask == null || mMask.length() == 0 ?
String.valueOf(s.charAt(i)) : mMask;
if(childView.getChildAt(i) instanceof LinearLayout)
{
Log.e("Taggggggggggg",childView.getChildCount() +"");
Log.e("Taggggggggggg",childView.getClass().getSimpleName() + " " + childView.getClass().getSimpleName().length());
//((TextView) childView.getChildAt(i)).setText(mask);
}
}
else {
}
}
}
});
}
如您所见,我可以记录我的 wapContainer 我以编程方式创建但我不能(我不知道)如何获取 wapContainer 的 childView(我的文本视图)
如果有人知道解决方案请帮助我
谢谢大家
通常的做法是为您的 textView 设置一个 ID。
然后使用 findViewById() 获取对它的引用。
希望对您有所帮助。
我尝试创建我自己的 PinView.i 创建它但我有一个 problem.i 试图解释我的问题 我创建了四个文本视图并将其添加到 Linearlayout 中,这个线性布局添加了我的容器(布局 我有我的 xml 文件)。现在我想从我的 fontainer.this 中获取我的子视图是一个结构我的观点
<container>
<wapContainer>
<Textview>
</Textview>
</wapContainer>
<container>
这是我的来源
private void addView( final LinearLayout childView) {
// Add a digit view for each digit
inputValue.setBackgroundColor(getResources().getColor(android.R.color.transparent));
inputValue.setTextColor(getResources().getColor(android.R.color.transparent));
inputValue.setCursorVisible(false);
inputValue.setFilters(new InputFilter[]{new InputFilter.LengthFilter(mDigits)});
inputValue.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_VARIATION_PASSWORD);
inputValue.setImeOptions(EditorInfo.IME_FLAG_NO_EXTRACT_UI);
inputValue.setOnFocusChangeListener(new OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
// Update the selected state of the views
int length = inputValue.getText().length();
for (int i = 0; i < mDigits; i++) {
childView.getChildAt(i).setSelected(hasFocus && (mAccentType == ACCENT_ALL ||
(mAccentType == ACCENT_CHARACTER && (i == length ||
(i == mDigits - 1 && length == mDigits)))));
}
if (mOnFocusChangeListener != null) {
mOnFocusChangeListener.onFocusChange(CustomPinConfirmView.this, hasFocus);
}
}
});
for (int i = 0; i < mDigits; i++) {
DigitView digitView = new DigitView(getContext());
digitView.setLayoutParams(new LinearLayout.LayoutParams(valueInPixels, valueInPixels));
wapContainer = new LinearLayout(mContext);
wapContainer.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT, 5f / mDigits));
wapContainer.setGravity(Gravity.CENTER);
digitView.setTextColor(Color.WHITE);
digitView.setTextSize(pxFromDp(14, mContext));
digitView.setGravity(Gravity.CENTER);
mWidgets.add(digitView);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
digitView.setElevation(mDigitElevation);
}
wapContainer.addView(digitView);
childView.addView(wapContainer);
}
inputValue.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s) {
int length = s.length();
for (int i = 0; i < mDigits; i++) {
if (s.length() > i) {
String mask = mMask == null || mMask.length() == 0 ?
String.valueOf(s.charAt(i)) : mMask;
if(childView.getChildAt(i) instanceof LinearLayout)
{
Log.e("Taggggggggggg",childView.getChildCount() +"");
Log.e("Taggggggggggg",childView.getClass().getSimpleName() + " " + childView.getClass().getSimpleName().length());
//((TextView) childView.getChildAt(i)).setText(mask);
}
}
else {
}
}
}
});
}
如您所见,我可以记录我的 wapContainer 我以编程方式创建但我不能(我不知道)如何获取 wapContainer 的 childView(我的文本视图) 如果有人知道解决方案请帮助我 谢谢大家
通常的做法是为您的 textView 设置一个 ID。
然后使用 findViewById() 获取对它的引用。
希望对您有所帮助。