您好,我使用GCM在Android中实现推送通知.我正在尝试为通知设置图像而不是默认的应用程序图标.我可以使用以下代码实现此目的
if(extras.getString("src") != null){
URL url = new URL(extras.getString("src"));
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setDoInput(true);
connection.connect();
InputStream input = connection.getInputStream();
Bitmap large_icon = BitmapFactory.decodeStream(input);
mBuilder.setLargeIcon(large_icon);
}
Run Code Online (Sandbox Code Playgroud)
通常情况下,图像来自网络(jpg,png等),而不是设备中的内容.上面的代码有效,但图像太大或太小.我想知道位图的最佳大小或宽高比,以便我可以提供合适的图像
我有菜单项,如:
<item
android:id="@+id/action_search"
android:title="search"
app:actionViewClass="android.support.v7.widget.SearchView"
app:showAsAction="always"/>
@Override
public boolean onCreateOptionsMenu( Menu menu ) {
getMenuInflater().inflate( R.menu.passenger, menu );
searchItem = menu.findItem( R.id.action_search );
searchView = (SearchView)MenuItemCompat.getActionView( searchItem );
searchView.setSubmitButtonEnabled( false );
return super.onCreateOptionsMenu( menu );
}
Run Code Online (Sandbox Code Playgroud)
我想检查searchView是否已展开.
我尝试过searchItem.isActionViewExpanded(),searchView.isHovered()但没有一个能奏效.
我错过了什么?
TIA
我有以下简单的设置:
swipeable.xml
<LinearLayout
android:id="@+id/content_frame"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<include layout="@layout/toolbar" />
<android.support.v4.view.ViewPager
android:id="@+id/pager"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<android.support.v4.view.PagerTabStrip
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
</android.support.v4.view.ViewPager>
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)
活动:
public class InfoActivity extends ActionBarActivity {
private static final int[][] KEYS = { { R.string.usage, R.string.usage_text },
{ R.string.data_protection, R.string.data_protection_text },
{ R.string.impressum, R.string.impressum_text } };
@Override
protected void onCreate( Bundle savedInstanceState ) {
setContentView( R.layout.swipeable );
super.onCreate( savedInstanceState );
ViewPager viewPager = (ViewPager)findViewById( R.id.pager );
viewPager.setAdapter( new SwipeAdapter( getSupportFragmentManager() ) );
}
class SwipeAdapter extends FragmentStatePagerAdapter { …Run Code Online (Sandbox Code Playgroud) 我有以下设置:
<android.support.design.widget.NavigationView
style="@style/NavigationView"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="start"
app:itemTextAppearance="@style/DrawerTextAppearance"
app:menu="@menu/drawer"/>
Run Code Online (Sandbox Code Playgroud)
菜单/ drawer.xml
<menu>
<item
android:id="@+id/messages_item"
android:icon="@drawable/ic_notifications_neg"
app:actionLayout="@layout/counter"
android:title="@string/message_center"/>
<item
android:id="@+id/search_item"
android:icon="@drawable/ic_search_neg"
android:title="@string/search"/>
</menu>
Run Code Online (Sandbox Code Playgroud)
布局/ counter.xml
<TextView
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="26dp"
android:layout_height="26dp"
android:text="55"
style="@style/Bubble"/>
Run Code Online (Sandbox Code Playgroud)
样式:
<style name="Bubble" parent="android:Widget.TextView">
<item name="android:gravity">center</item>
<item name="android:layout_gravity">center_vertical</item>
<item name="android:textColor">@android:color/white</item>
<item name="android:background">@drawable/bubble</item>
</style>
Run Code Online (Sandbox Code Playgroud)
这会产生以下结果:
尽管风格的重力设置,气泡仍显示在顶部.
如何将actionLayout定位在菜单项的中间?
我有以下布局:
<LinearLayout
android:id="@+id/myButton"
android:layout_width="@dimen/logo_radius"
android:layout_height="match_parent"
android:background="@drawable/myShape">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/driver_half"/>
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)
和以下myShapedrawable:
<selector>
<item><shape android:shape="oval">
<stroke android:color="@android:color/black" android:width="4dp"/>
<solid android:color="@android:color/white" />
</shape></item>
</selector>
Run Code Online (Sandbox Code Playgroud)
我应用了以下过滤器:
myButton.getBackground().setColorFilter( orange, PorterDuff.Mode.ADD );
Run Code Online (Sandbox Code Playgroud)
结果看起来那样:
然后我将myShape改为圆角矩形:
<selector>
<item>
<shape
android:shape="rectangle">
<corners android:bottomLeftRadius="@dimen/logo_radius" android:bottomRightRadius="2dp" android:topLeftRadius="@dimen/logo_radius" android:topRightRadius="2dp"/>
<stroke
android:width="4dp"
android:color="@android:color/black"/>
<solid android:color="@android:color/white"/>
</shape>
</item>
</selector>
Run Code Online (Sandbox Code Playgroud)
结果看起来像:
左边部分没有应用过滤器,右边部分没有过滤器.
我想得到什么:
如何使用Porter-Duff过滤器正确绘制边框橙色?还有其他选择吗?
我有一个
<android.support.design.widget.NavigationView
app:menu="@menu/drawer"
/>
Run Code Online (Sandbox Code Playgroud)
使用以下菜单项:
<item
android:id="@+id/main_item"
android:icon="@drawable/ic_menu_main"
android:title="@string/app_name"/>
<group
android:id="@+id/some_group"
android:checkableBehavior="single"/>
<item
android:id="@+id/teams_item"
android:icon="@drawable/ic_menu_teams"
android:title="@string/teams"/>
Run Code Online (Sandbox Code Playgroud)
现在我想some_group在它之下或之下添加一个项目.
我试过了:
MenuItem mi = menu.add( R.id.soume_group, someId, NONE, "some name" );
Run Code Online (Sandbox Code Playgroud)
要么
MenuItem mi = menu.add( R.id.soume_group, someId, 2, "some name" );
Run Code Online (Sandbox Code Playgroud)
但是项目会添加到菜单的底部.
如何解决我的问题?
TIA
这3个有什么区别?
def search(String id) {
//code
}
Object search(String id) {
//code
}
void search(String id) {
//code
}
Run Code Online (Sandbox Code Playgroud)
特别是def和之间Object.
我有一个RecyclerView带适配器的布局:
public class SimpleRecyclerAdapter extends RecyclerView.Adapter<SimpleViewHolder> {
protected List<JSONObject> data = new ArrayList<>();
public List<JSONObject> getData() { return data; }
}
Run Code Online (Sandbox Code Playgroud)
我更新它的适配器,如:
public void udpdateFromJson( JSONObject payload ) {
JSONArray msgs = payload.optJSONArray( "messages" );
for( int ix = 0; null != msgs && ix < msgs.length(); ix++ ){
JSONObject o = msgs.optJSONObject( ix );
if( loadingMore ) adapter.getData().add( 1 + ix, o );
else adapter.getData().add( o );
}
adapter.notifyDataSetChanged();
recyclerView.invalidate();
}
Run Code Online (Sandbox Code Playgroud)
问题是,只有当我触摸或滚动视图时才会看到新项目.
我错过了什么?
更新:
解决问题我更换了线
adapter.notifyDataSetChanged();
recyclerView.invalidate(); …Run Code Online (Sandbox Code Playgroud) 我有以下设置:
<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:subtitleTextAppearance="@style/TitleTextStyle"
app:theme="@style/ActionBarStyle.Light"/>
Run Code Online (Sandbox Code Playgroud)
和
<style name="TitleTextStyle">
<item name="android:maxLines">2</item>
<item name="android:textAllCaps">false</item>
</style>
Run Code Online (Sandbox Code Playgroud)
和
getSupportActionBar().setSubtitle( targetString );
Run Code Online (Sandbox Code Playgroud)
该@textAllCaps应用,但@maxLines被忽略(我试过也`@minLines).
如何在字幕中启用多行文字?
TIA
更新:
我将代码添加到onStart:
@Override
public void onStart() {
super.onStart();
try{
Field field = Toolbar.class.getDeclaredField( "mSubtitleTextView" );
field.setAccessible( true );
subtitleTextView = (TextView)field.get( toolbar );
subtitleTextView.setSingleLine( false );
subtitleTextView.setMaxLines( 2 );
subtitleTextView.setEllipsize( TruncateAt.END );
}catch( Exception e ) {
Logg.e( this, "", e );
}
}
Run Code Online (Sandbox Code Playgroud)
现在的问题是,应用了ellipsize值,但setMaxLines()忽略了调用...
UPD2:
setSingleLine( …
android multiline subtitle android-appcompat android-actionbar
我的应用程序将连接到蓝牙LE设备.通常使用执行设备扫描mBluetoothAdapter.startLeScan(mLeScanCallback);.回调为您提供有关可用设备的信息.
如果你想连接到专用设备,你会做类似的事情
BluetoothDevice device = mBluetoothAdapter.getRemoteDevice(address);
Run Code Online (Sandbox Code Playgroud)
然后
mBluetoothGatt = device.connectGatt(this, false, mGattCallback);
Run Code Online (Sandbox Code Playgroud)
对我而言,连接到BLE设备所需的唯一事情就是知道BLE地址,然后通过上述两个步骤连接到它.因此,如果我已经知道BLE地址(例如,它写在BLE设备的标签上),我不需要执行BLE扫描.
但我遇到的是,如果我有一个以前从未通过BLE扫描找到的BLE设备,则无法使用其BLE地址直接连接到它.我必须通过我的Android手机扫描至少一次才能找到它.之后我再也不需要扫描了,只需使用其BLE地址即可连接到BLE设备.
它应该是这样的还是我监督的东西?
非常感谢,Stefan
android ×9
bluetooth ×1
groovy ×1
menu ×1
menuitem ×1
multiline ×1
porter-duff ×1
searchview ×1
shape ×1
subtitle ×1