【发布时间】:2020-12-22 01:19:40
【问题描述】:
我是将旧的 Android Java 应用程序转换为 Kotlin 的 Kotlin 新手。我的应用有 2 个标签。在我的旧应用程序中,我能够为每个选项卡标题显示 1 个图标而不是文本。但是,我的旧代码中的某些 API 已被弃用,即
context.getResources().getDrawable()
我已按如下所示进行了更新,但没有任何效果。
我试过了:
- 使用
addTab()和setIcon()手动添加选项卡 - 我已经放置了日志语句以确保我的图像能够加载。他们有。
仍然没有任何效果。我究竟做错了什么?我的代码如下。
主活动:
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
var viewPager = findViewById<ViewPager>(R.id.viewpager)
var myTabLayout = findViewById<TabLayout>(R.id.tab_layout)
var adapter = MyFragmentPagerAdapter(supportFragmentManager, this)
viewPager.adapter = adapter
//myTabLayout.addTab(myTabLayout.newTab().setIcon(R.drawable.sunrise))
//myTabLayout.addTab(myTabLayout.newTab().setIcon(R.drawable.sunrise))
myTabLayout.setupWithViewPager(viewPager)
}
}
MyFragmentPagerAdapter:
class MyFragmentPagerAdapter(fm: FragmentManager, private val mContext: Context) :
FragmentPagerAdapter(fm, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT) {
private lateinit var context: Context
override fun getItem(position: Int): Fragment {
return when (position) {
0 -> TabFragment1()
1 -> TabFragment2()
else -> TabFragment1()
}
}
override fun getCount(): Int {
return 2
}
/*override fun getPageTitle(position: Int): CharSequence? {
return when (position) {
0 -> "First"
1 -> "Second"
else -> "First"
}
}*/
override fun getPageTitle(position: Int): CharSequence? {
val image: Drawable? = if (position == 0)
//context.getResources().getDrawable(R.drawable.sunrise)
ContextCompat.getDrawable(mContext, R.drawable.sunrise)
else
//context.getResources().getDrawable(R.drawable.sunset)
ContextCompat.getDrawable(mContext, R.drawable.sunset)
val sb = SpannableString(" ")
Log.d("DEBUG", "Here")
if (image != null) {
image.setBounds(0, 0, image.intrinsicWidth, image.intrinsicHeight)
Log.d("DEBUG", "image isn't null")
val imageSpan = ImageSpan(image, ImageSpan.ALIGN_BOTTOM)
sb.setSpan(imageSpan, 0, 1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE)
}
return sb
}
}
我的主要布局文件:
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<com.google.android.material.appbar.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/AppTheme.AppBarOverlay">
<com.google.android.material.tabs.TabLayout
android:id="@+id/tab_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:tabGravity="fill"
app:tabMode="fixed" />
</com.google.android.material.appbar.AppBarLayout>
<androidx.viewpager.widget.ViewPager
android:id="@+id/viewpager"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior" />
</androidx.constraintlayout.widget.ConstraintLayout>
【问题讨论】:
标签: android kotlin android-viewpager android-tablayout