我正在尝试在我的导航抽屉菜单中的项目旁边显示一个图标,但由于某种原因,图标始终显示为灰色而不是原始颜色(棕色).有没有办法防止这种情况发生,以显示图标的原始颜色?
MainActivity.java
public class MainActivity extends AppCompatActivity {
private DrawerLayout mDrawerLayout;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
if (navigationView != null) {
setupDrawerContent(navigationView);
}
}
private void setupDrawerContent(NavigationView navigationView) {
navigationView.setNavigationItemSelectedListener(
new NavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(MenuItem menuItem) {
mDrawerLayout.closeDrawers();
return true;
}
});
}
}
Run Code Online (Sandbox Code Playgroud)
drawer_view.xml
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:title="Section">
<menu>
<item
android:id="@+id/navigation_item_1"
android:icon="@drawable/ic_browncircle"
android:title="Sub item 1" />
</menu>
</item>
</menu>
Run Code Online (Sandbox Code Playgroud)
使用新的GridLayoutManager:https://developer.android.com/reference/android/support/v7/widget/GridLayoutManager.html
它需要一个明确的跨度计数,所以问题现在变成:你怎么知道每行有多少"跨度"?毕竟这是一个网格.根据测量的宽度,RecyclerView可以容纳多个跨距.
使用旧的GridView
,您只需设置"columnWidth"属性,它将自动检测适合的列数.这基本上是我想要为RecyclerView复制的:
RecyclerView
这似乎是很常见的行为,所以有一种我没有看到的更简单的方法吗?
android android-gridlayout gridlayoutmanager android-recyclerview
以下是我的活动的代码
import android.app.Activity;
import android.os.Bundle;
import android.support.v7.widget.ShareActionProvider;
import android.view.Menu;
import android.view.MenuItem;
public class MainActivity extends Activity {
private ShareActionProvider shareAction;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.activity_main, menu);
MenuItem item = menu.getItem(R.id.menu_settings);
shareAction = (ShareActionProvider) item.getActionProvider();
return true;
}
}
Run Code Online (Sandbox Code Playgroud)
问题是从ActionProvider到ShareActionProvider存在一个强制转换错误.为什么它如下所示是activity_menu.xml
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:id="@+id/menu_settings"
android:orderInCategory="100"
android:showAsAction="always"
android:title="@string/menu_settings"
android:actionProviderClass="android.widget.ShareActionProvider"
/>
</menu>
Run Code Online (Sandbox Code Playgroud) 刚刚创建了一个Nexus 10模拟器,但是当我启动它时,会显示错误的分辨率.当它应该显示为2560 x 1600时,它一直显示为800 x 1280.有谁知道地球上发生了什么以及如何解决这个问题?
设置操作栏的颜色后,actionBarColor
in private String actionBarColor = "#B36305";
会突出显示为黄色,并且由于某种原因会返回警告.可以做些什么来摆脱这个警告?
字段可以转换为局部变量
public class MainActivity extends AppCompatActivity {
private String actionBarColor = "#B36305";
private int getFactorColor(int color, float factor) {
float[] hsv = new float[3];
Color.colorToHSV(color, hsv);
hsv[2] *= factor;
color = Color.HSVToColor(hsv);
return color;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.fragment_activity_main);
ActionBar actionBar = getSupportActionBar();
if(actionBar != null) {
actionBar.setBackgroundDrawable(new ColorDrawable(Color.parseColor(actionBarColor)));
}
}
}
Run Code Online (Sandbox Code Playgroud) java android android-appcompat android-actionbar android-support-library
FragmentStatePagerAdapter
已从API 27中弃用。的替代方案是FragmentStatePagerAdapter
什么?
private class MainPagerAdapter extends FragmentStatePagerAdapter {
MainPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
Fragment result = new DummyFragment();
return result;
}
@Override
public int getCount() {
return 5;
}
}
Run Code Online (Sandbox Code Playgroud)
上面的代码显示FragmentStatePagerAdapter
,getItem
并super(fm);
已弃用
在操作栏中为后退箭头定义自定义颜色后,将返回警告.可以做些什么来摆脱这个警告?
final Drawable upArrow = ContextCompat.getDrawable(this, R.drawable.abc_ic_ab_back_mtrl_am_alpha);
upArrow.setColorFilter(Color.BLUE, PorterDuff.Mode.SRC_ATOP);
actionBar.setHomeAsUpIndicator(upArrow);
Run Code Online (Sandbox Code Playgroud)
资源@ drawable/abc_ic_ab_back_mtrl_am_alpha在com.android.support:appcompat-v7中标记为私有
java android android-actionbar android-support-library android-studio
我想要绘制一个图表,就像附加的图像一样,但是我在绘制右边的红色垂直矩形以及将其他对象放在顶部时遇到了问题.最大的问题是与Android设备的众多不同屏幕尺寸有关.我完全理解我在这个过程中想要实现的目标,其中包括以下目标.所有帮助将受到高度赞赏.
布局
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<my.package.name.ComplexDiagram
android:layout_width="match_parent"
android:layout_height="65dp"
android:layout_centerVertical="true"
/>
</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)
Java的
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.RectF;
import android.util.AttributeSet;
import android.view.View;
public class ComplexDiagram extends View {
private int measuredWidth, measuredHeight;
private Paint mGreyRectPaint, mBlackLinePaint, mRedRectPaint;
private RectF mGreyRect, mBlackLineF, mRedRectF;
public ComplexDiagram(Context context) {
super(context);
init(context, null, 0);
}
public ComplexDiagram(Context context, AttributeSet attrs) {
super(context, attrs);
init(context, attrs, 0);
}
public ComplexDiagram(Context context, AttributeSet attrs, …
Run Code Online (Sandbox Code Playgroud) 每当我在搜索视图中输入时,关闭按钮(X)似乎由于某种原因而被禁用,而不是以白色显示.如何解决此错误以使其显示为白色?
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.menu_search_list, menu);
MenuItem item = menu.findItem(R.id.action_search);
SearchView searchView = (SearchView) MenuItemCompat.getActionView(item);
searchView.setOnQueryTextListener(this);
searchView.setQueryHint(getResources().getString(R.string.station_search_hint));
}
Run Code Online (Sandbox Code Playgroud)
menu_search_list.xml
<?xml version="1.0" encoding="utf-8"?>
<menu
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto" >
<item android:id="@+id/action_search"
android:icon="@drawable/ic_action_search_light"
android:title="@string/action_search"
android:orderInCategory="100"
app:showAsAction="always"
app:actionViewClass="android.support.v7.widget.SearchView"/>
</menu>
Run Code Online (Sandbox Code Playgroud) 由于API 27 FragmentPagerAdapter
已弃用。最好的替代方法是什么?
就我而言,我知道super(fragmentManager, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT)
需要使用类似的东西,但是我不知道代码需要放在哪里。
我在课堂上得到了这些进口:
import androidx.fragment.app.FragmentManager
import androidx.fragment.app.FragmentPagerAdapter
Run Code Online (Sandbox Code Playgroud)
但FragmentPagerAdapter
在class MyViewPagerAdapter(manager: FragmentManager) : FragmentPagerAdapter(manager){
被划掉。
class MyViewPagerAdapter(manager: FragmentManager) : FragmentPagerAdapter(manager){
private val fragmentList : MutableList<androidx.fragment.app.Fragment> = ArrayList()
private val titleList : MutableList<String> = ArrayList()
override fun getItem(position: Int): androidx.fragment.app.Fragment {
return fragmentList[position]
}
override fun getCount(): Int {
return fragmentList.size
}
fun addFragment(fragment: androidx.fragment.app.Fragment, title: String){
fragmentList.add(fragment)
titleList.add(title)
}
override fun getPageTitle(position: Int): CharSequence? {
return titleList[position]
}
}
Run Code Online (Sandbox Code Playgroud) android android-viewpager kotlin fragmentpageradapter fragmentmanager