2017-02-14 1 views
3

내 액티비티에서 팽창중인 모든 뷰 위젯을 가로 채고 해당 뷰의 setText 기능이있는 경우이를 덮어 쓰려고합니다.모든 뷰 요소를 가로 채기 요?

XML 레이아웃에서 TextView에 android : text = "bla"가있는 경우 가로 채기를 원할 것입니다. xml에서 설정되는 모든 텍스트의 끝에 **를 추가 할 수 있습니다.

내가 필요로하는 것과 비슷한 것으로 보이는 한 가지 방법은 사용자 정의 레이아웃 인플레이터를 사용하는 것입니다. 내 InflatorOnSteriods에서

LayoutInflaterCompat.setFactory(layoutInflator, InflatorOnSteriods(this)) 

과는 onCreateView을 무시하고 다음이 모든보기 인터셉트 ..이 방법은 전혀 작동하지 않는 것 같습니다. onCreateView는 호출되지 않습니다.

나는 cloneInContext

LayoutInflaterCompat.setFactory(layoutInflater.cloneInContext(this), InflatorOnSteriods(this)) 

을 사용하는 것도 시도하지만 행운은 물론, 어쩌면 나의 접근 방식은 내가 또한 내가 모든 뷰가 발표되고 가로 챌 수 있으며, 특정 설정이 될 수있는 다른 방법으로 문을 열어주는 말들 완전히 잘못 없다 그 뷰의 특정의 속성 내가 그보기를 바꾸는 마지막 사람이되고 시스템이 나의 변화를 존중하고 나중에 그것을 무시하지 않도록 확실히하는 것이 정말로 중요합니다.

업데이트 :

나는 그것의 관련을 생각하지 않지만, 나는 마침내 내가 인플레이터 공장 솔루션을 원하는 것을 달성하기 위해 관리 내 솔루션을 문제 해결 시간 후 InflatorOnSteroids.kt의 코드

class InflatorOnSteriods(val appCompatActivity: AppCompatActivity) : LayoutInflaterFactory { 

override fun onCreateView(parent: View, name: String, context: Context, attrs: AttributeSet): View { 
    var result: View 

    if (TextUtils.equals(name, "DebugDrawerLayout")) { 
     result = ImageView(context, attrs) 
    } 
    result = appCompatActivity.onCreateView(name, context, attrs) 
    if (result == null) { 
     // Get themed views from app compat 
     result = appCompatActivity.delegate.createView(parent, name, context, attrs) 
    } 
    return result 
} 
} 
+0

당신이 당신의 질문에 대한'InflatorOnSteriods' 클래스 코드를 추가 할 수 있습니다 here 찾을 수 있습니까? – petey

+0

클래스가 이제는 아무 것도하지 않더라도 코드 @petey를 추가했습니다 ... 그래서 문제는 없다고 생각합니다. 내 질문은 올바른 접근 방법 일 수도 있습니다. –

+0

"그렇다면 XML 레이아웃에서 TextView에 android : text ="bla "가있는 경우 가로 채기를 원할 수 있으며 xml에서 설정 한 모든 텍스트의 끝에 **를 추가 할 수 있기를 원합니다." 이게 어디에서 생기는거야? (또한 위대한 당신은 kotlin을 사용하고 있습니다) – petey

답변

1

.

먼저 사용자 지정 인플레이터가 설정된 추상 활동을 만듭니다.

abstract class SteroidsActivity : AppCompatActivity() { 

var mInflater: LayoutInflater? = null 
abstract fun getActivityLayout(): Int 

override fun onCreate(savedInstanceState: Bundle?) { 
    super.onCreate(savedInstanceState) 
    mInflater = layoutInflater?.cloneInContext(this) 
    LayoutInflaterCompat.setFactory(mInflater, InflaterOnSteroids(this)) 
    setContentView(getActivityLayout()) 
} 

override fun getLayoutInflater(): LayoutInflater? { 
    return mInflater 
} 

override fun getSystemService(name: String): Any? { 
    if (name == LAYOUT_INFLATER_SERVICE) { 
     if (mInflater == null) { 
      mInflater = super.getSystemService(name) as LayoutInflater 
     } 
     return mInflater 
    } 
    return super.getSystemService(name) 
    } 
} 
당신이 사용자 정의 팽창기 팩토리를 작성하기 만하면됩니다

두 번째 것은

class InflaterOnSteroids(appCompatActivity1: AppCompatActivity) : LayoutInflaterFactory { 

    override fun onCreateView(parent: View?, name: String, context: Context, attrs: AttributeSet): View? { 
     //Do stuff here and return a view 
     return null 
     } 
} 
내 코드의 문제는 항상 내가 될 때까지 문제를 해결할 수 없다는 이상한 오류로 충돌 한 것을

을 추가해야한다는 것을 알았습니까? 보기 후 내가 널 :) 될 수 있습니다 코 틀린 부모 뷰를 사용하고 있기 때문에

해피 프로그래밍

좋은 참고