我想在我的xml文件中自动添加以下xml代码,即TextView标签,该怎么办?
我要在打开标签后添加的代码是:
com.mycompany.projectname.
我要在上面的代码中插入的标签是:
<TextView
android:id="@+id/textView16"
android:layout_width="wrap_content"
/>
我的预期输出如下
<com.mycompany.projectname.TextView
android:id="@+id/textView16"
android:layout_width="wrap_content"
/>
答案 0 :(得分:0)
自定义小部件android studio不会自动以XML格式添加/添加。 您必须使用包手动给您的班级名称。
在预定义小部件中,如果要添加一些属性,请按
Ctrl + Windows空格
Mac的Command +空格
答案 1 :(得分:0)
您无法在运行时修改资源文件(包括xml布局)。
不过,您可以在Context
中安装自定义LayoutInflater.Factory2来修改XML解析行为。下面的示例(请注意,我正在使用Kotlin扩展):
activity_style.xml
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/txtTest"
android:layout_gravity="center"
android:text="Hello world"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<Button
android:id="@+id/btnTest"
android:text="Test"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</FrameLayout>
sample.kt
import android.content.Context
import android.os.Bundle
import android.support.v7.app.AppCompatActivity
import android.support.v7.app.AppCompatDelegate
import android.support.v7.widget.AppCompatTextView
import android.util.AttributeSet
import android.util.Log
import android.view.LayoutInflater
import android.view.View
import com.github.ppaszkiewicz.testvhpayload.R
import kotlinx.android.synthetic.main.activity_style.*
class StyleActivity : AppCompatActivity(){
override fun onCreate(savedInstanceState: Bundle?) {
// replace default factory with a wrapper - must be called before onCreate
layoutInflater.factory = MyTextViewFactory(delegate)
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_style)
Log.d("TEST","TextView is ${txtTest::class.simpleName}")
Log.d("TEST","Button is ${btnTest::class.simpleName}")
}
}
class MyTextViewFactory(val appCompatDelegate: AppCompatDelegate) : LayoutInflater.Factory2{
override fun onCreateView(parent: View?, name: String, context: Context, attrs: AttributeSet): View? {
if(name == "TextView")
return MyTextView(context, attrs) // custom behaviour for TextViews
return appCompatDelegate.createView(parent, name, context, attrs) // default appcompat views
}
override fun onCreateView(name: String, context: Context, attrs: AttributeSet): View? {
return onCreateView(null, name, context, attrs)
}
}
class MyTextView @JvmOverloads constructor(
context: Context,
attrs: AttributeSet? = null,
defStyleAttr: Int = 0
) : AppCompatTextView(context, attrs, defStyleAttr)
运行日志后应显示
TextView is MyTextView
Button is AppCompatButton