我想创建一个线性布局,其行为与ImageButton类似.
<LinearLayout
android:id="@+id/container"
style="?WidgetHomeIconContainer">
<ImageView
android:id="@+id/icon"
style="?WidgetHomeIcon" />
<TextView
android:id="@+id/title"
style="?WidgetHomeLabel"
android:text="@string/title"
android:textAppearance="?attr/TextHomeLabel" />
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)
在ImageView,TextView和LinearLayout的样式中,我为所有状态设置了一个选择器.
现在:
所以我想做以下几点.当我点击父LinearLayout时,我需要将它的所有子项更改为按下状态.
我尝试将以下代码添加到LinearLayout onClickListener以传播点击:
@Override
public void onClick(View v)
{
LinearLayout l = (LinearLayout) v;
for(int i = 0; i < l.getChildCount(); i++)
{
l.getChildAt(i).setClickable(true);
l.getChildAt(i).performClick();
}
}
Run Code Online (Sandbox Code Playgroud)
但它仍然保持相同的状态.非常感谢您的帮助.
片段有一个非常奇怪的问题.我使用最新的支持库.我也使用Google在其IOSCHED项目中使用的类似代码
但是我在轮换后重新创建活动时遇到问题.在销毁并再次创建活动之后,我调用了用于管理片段事务的方法(在onStart方法中).这行只被调用一次,但它创建片段TWICE!
这是我的活动方法:
public abstract class SinglePaneActivity extends FragmentActivity
{
@Override
protected void onStart()
{
super.onStart();
if(mFragment == null)
{
mFragment = onCreatePane();
mFragment.setArguments(Utils.intentToFragmentArguments(getIntent()));
Log.w(TAG, "Fragment creation counter = " + createCounter);
createCounter++;
getSupportFragmentManager()
.beginTransaction()
.add(R.id.root_container,mFragment)
.commit();
}
}
@Override
protected void onStop()
{
Log.i(TAG, "onStop");
if(mFragment != null)
{
getSupportFragmentManager()
.beginTransaction()
.remove(mFragment)
.commit();
mFragment = null;
}
super.onStop();
}
}
Run Code Online (Sandbox Code Playgroud)
和我的日志:
--Start of application--
11-18 13:26:37.050: I/SinglePaneActivity(19040): onCreate
11-18 13:26:37.050: I/SinglePaneActivity(19040): onStart
11-18 13:26:37.055: W/SinglePaneActivity(19040): replacing fragment, …
Run Code Online (Sandbox Code Playgroud) lifecycle android fragment android-lifecycle android-activity
我正在使用Intent.ACTION_OPEN_DOCUMENT_TREE
授予我的应用程序对外部存储的写访问权限(在Lollipop和Marshmallow上).
但我想在测试应用程序中写入外部存储.Intent.ACTION_OPEN_DOCUMENT_TREE
使用系统对话框,因此我无法在测试期间授予权限.我也尝试在应用程序中允许它,然后在测试中使用它但不共享 - 应用程序项目和测试项目是不同的包.
有没有人知道一些可能的解决方法,例如为测试目的授予整个外部存储的许可?也许通过改变一些系统属性?
adb shell setprop SOMEPROPERTY 1
testing android android-external-storage storage-access-framework
我观察到Android 6.0 Marshmallow中的新行为.滚动条的触摸区域比滚动条更干净.它在以下屏幕截图中可见.滚动条有20 dp(绿色区域),触摸区域可能是48 dp(蓝色和绿色区域).我想只在滚动条上方设置触摸区域:
我使用以下:
<resources xmlns:android="http://schemas.android.com/apk/res/android">
<style name="MyTheme.Dark" parent="android:Theme.Black">
<item name="android:fastScrollStyle">@style/Widget.FastScroll</item>
<item name="android:scrollbarThumbVertical">@drawable/dark_scrollbar_thumb</item>
<item name="android:scrollbarTrackVertical">@drawable/dark_scrollbar_track</item>
<item name="android:scrollbarSize">4dp</item>
<item name="android:fastScrollThumbDrawable">@drawable/dark_scrollbar_fast_thumb</item>
<item name="android:fastScrollTrackDrawable">@drawable/dark_scrollbar_fast_track</item>
</style>
<style name="Widget.FastScroll" parent="android:Widget.Material.FastScroll">
</style>
</resources>
Run Code Online (Sandbox Code Playgroud)
dark_scrollbar_fast_thumb.xml:
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
<item>
<shape>
<size
android:height="30dp"
android:width="20dp" />
<solid android:color="@android:color/transparent" />
</shape>
</item>
<item android:left="8dp" android:right="8dp">
<shape>
<size
android:height="30dp"
android:width="4dp" />
<solid android:color="@color/dark_secondary" />
</shape>
</item>
</layer-list>
Run Code Online (Sandbox Code Playgroud)
dark_scrollbar_fast_track.xml:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" >
<size android:width="@dimen/1dp" />
<solid android:color="@color/dark_scrollbar_track" />
</shape>
Run Code Online (Sandbox Code Playgroud)
dark_scrollbar_fast_thumb.xml:
<item>
<shape>
<size
android:height="30dp" …
Run Code Online (Sandbox Code Playgroud) 我对MediaStore有很大的问题.当MediaStore通过MTP进行更改时,我需要处理事件.我已经有一个接收器用于android.intent.action.MEDIA_SCANNER_FINISHED
操作,但它仅对通用大容量存储(UMS)有用.扫描程序不通过MTP启动,因为MTP直接更改了MediaStore数据库.
请你如此善良,帮助我如何发现这一事件.非常感谢您的帮助!
我的某些设备有问题。我无法在任何设备上复制它,但是有些用户报告了很多崩溃报告。
这是例外:
java.lang.IllegalArgumentException: Unknown URL content://media/external/file
at android.content.ContentResolver.delete(ContentResolver.java:1024)
Run Code Online (Sandbox Code Playgroud)
我用这个:
context.getContentResolver()。delete(MediaStore.Files.getContentUri(“ external”),MediaStore.Files.FileColumns.DATA +“ =?”,新的String [] {path});
之后,我调用MediaScannerConnection.scanFile()
文件的父目录,因为这是如何通知MediaScanner有关文件删除以及如何刷新MTP内容的最有效的方法。我尝试了在stackoverflow上找到的所有其他方式(例如,Android如何使用MediaScannerConnection scanFile),但没有任何一种方法能达到这个目的。
顺便说一句。我仅将其用于API 11及更高版本。肯定安装了外部存储。
我有以下问题:1.您知道发生此异常的任何原因吗?我不想只是忽略异常。而且,当大多数设备都能正常运行时,我也不想删除此代码。2.您知道一些新的可靠方法,如何在删除某些文件时通知MediaScanner,以及如何立即刷新MTP的内容吗?
我正在用ListFragments解决一个奇怪的问题.我有一个简单的FragmentActivity与一个FrameLayout女巫是我的ListFragment的容器.我使用自定义适配器来获取数据.在我旋转设备以改变方向之前,所有东西都在抛光.之后,列表视图被显示两次 - 一个列表与第二个列表重叠.当我滚动列表时,只有一个列表正在移动,它会创建如图所示的人工制品.
我在onCreateActivity中初始化适配器,我在onDestroy方法中没有做任何事情.我在onDestroy方法中应该做些什么来清除列表.你有没有遇到过这个问题?我真的不知道该怎么做.
谢谢!
我有存储字符串集首选项的问题.我有这些实用方法用于存储:
public static void putStringSet(SharedPreferences pref, Editor e, String key, Set<String> set)
{
if (Utils.isApiLevelGreaterThanGingerbread())
{
// e.remove(key); // I tried to remove it here
e.putStringSet(key, set);
}
else
{
// removes old occurences of key
for (String k : pref.getAll().keySet())
{
if (k.startsWith(key))
{
e.remove(k);
}
}
int i = 0;
for (String value : set)
{
e.putString(key + i++, value);
}
}
}
public static Set<String> getStringSet(SharedPreferences pref, String key, Set<String> defaultValue)
{
if (Utils.isApiLevelGreaterThanGingerbread())
{
return pref.getStringSet(key, …
Run Code Online (Sandbox Code Playgroud) 我想请教您关于功能模板的建议.我有一个功能,可以将一些数据添加到缓冲区.但我还需要将有关数据类型的信息添加到缓冲区中.数据类型是以下枚举:
enum ParameterType
{
UINT,
FLOAT,
DOUBLE
};
Run Code Online (Sandbox Code Playgroud)
我需要从这样的函数创建一个函数模板:
void SomeBuffer::append( double par )
{
appendType( DOUBLE );
memcpy( pStr + _length, &par, sizeof( double ) );
_length += sizeof( double );
appendType( DOUBLE );
}
Run Code Online (Sandbox Code Playgroud)
你能否告诉我如何根据参数类型从ParameterType传递appendType()的值.
template<class T>
void SomeBuffer::append( T par )
{
appendType( ??? );
memcpy( pStr + _length, &par, sizeof( T ) );
_length += sizeof( T );
appendType( ??? );
}
Run Code Online (Sandbox Code Playgroud)
我尝试用一些宏来做但没有成功.非常感谢您的任何建议.