app:showAsAction="never" <!--Эта строчка означает, что "значок меню" никогда показан не будет-->
app:showAsAction="always"
getFragmentSupportManager()
вместо getFragmentManager().beginTransaction()
Fragment profileFragment = new Fragment();
Fragment profileFragment = new ProfileFragment();
И сам layout файл:
R.id.mainLayout
? Это FrameLayout или fragment, находящийся внутри layout-а активности?public SpriteBatch batch
, там даже модификатор доступа не стоит, то есть доступ в пределах пакета.SharedPreferences
или БД, но они легко будут обходиться переустановкой приложения или сменой даты на устройстве).Drawable first = imageViewFirst.getDrawable();
Drawable second = imageViewSecond.getDrawable();
Drawable.ConstantState stateFirst = first.getConstantState();
Drawable.ConstantState stateSecond = second.getConstantState();
if(stateFirst.equals(stateSecond)) {
// ваш код
}
Drawable imageViewDrawable = imageViewFirst.getDrawable();
Drawable.ConstantState imageViewDrawableState =imageViewDrawable.getConstantState();
Drawable fromResourcesDrawable = getResources().getDrawable(R.drawable.my_drawable);// ваш ресурс
Drawable.ConstantState fromResourcesState = fromResourcesDrawable.getConstantState();
if(imageViewDrawable.equals(fromResourcesState)) {
// ваш код
}
Android M
permissions нужно также проверять во время выполнения.public static final int NUMBER_OF_REQUEST = 23401;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
int canRead = ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE);
int canWrite = ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE);
if (canRead != PackageManager.PERMISSION_GRANTED || canWrite != PackageManager.PERMISSION_GRANTED) {
//Нужно ли нам показывать объяснения , зачем нам нужно это разрешение
if (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
//показываем объяснение
} else {
//просим разрешение
requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.READ_EXTERNAL_STORAGE}, NUMBER_OF_REQUEST);
}
} else {
//ваш код
}
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
switch (requestCode) {
case NUMBER_OF_REQUEST: {
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
Log.e("TAG", "Пользователь дал разрешение");
} else {
Log.e("TAG", "Пользователь отклонил разрешение");
}
return;
}
}
}
layout
вашей Activity
(одна в папке layout
(для смартфонов), а другая в папке - layout-large
(для планшетов)).В layout
для планшетов вставляете не только fragment
с вашим списком вариантов, но и FrameLayout
для отображения информации по объекту из списка.Activity
по нажатию на элемент списка вариантов пишите примерно такой код:if (myFrameLayout != null) { // FrameLayout существует только в layout для планшетов
showInforamtionAtDetailFragment(); //поэтому если он существует - показываем информацию во фрагменте
else {
openDetailActivity(); // иначе - у нас смартфон, потому что layout не существует;открываем отдельную Activity
}
AppCompat 23.2.0
.VectorDrawableCompat
.Gradle
вашего проекта,exception
, как и у вас.Gradle wrapper >= 2.0
):android {
defaultConfig {
vectorDrawables.useSupportLibrary = true
}
}
Gradle wrapper == 1.5
; скорее всего он вам и подойдёт)android {
defaultConfig {
// Stops the Gradle plugin’s automatic rasterization of vectors
generatedDensities = []
}
// Flag to tell aapt to keep the attribute ids around
aaptOptions {
additionalParameters "--no-version-vectors"
}
}
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:srcCompat="@drawable/ic_search"/>
app:srcCompat="@drawable/ic_search"
R.java
былtoolbar
, в котором делаем, что нужно:appBarLayout.addOnOffsetChangedListener(new AppBarLayout.OnOffsetChangedListener() {
@Override
public void onOffsetChanged(AppBarLayout appBarLayout, int verticalOffset) {
if (isCollapsed(verticalOffset)) {
//set status bar color your color
} else {
// set status bar color transparent
}
}
});
private boolean isCollapsed(int offset) {
return offset == 0 || offset <= toolbar.getHeight();
}
.3ds
в расширение.obj
..obj
- легко ищется поисковиком..obj
конвертируют в более дружественный для runtime и меньший по весу формат .g3db
.