小编inj*_*eer的帖子

GCM推送通知大图标大小

您好,我使用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等),而不是设备中的内容.上面的代码有效,但图像太大或太小.我想知道位图的最佳大小或宽高比,以便我可以提供合适的图像

android android-notifications google-cloud-messaging

15
推荐指数
2
解决办法
3万
查看次数

如何检测SearchView是否已扩展?

我有菜单项,如:

<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

android android-appcompat android-actionbar searchview

14
推荐指数
3
解决办法
8435
查看次数

PagerTabStrip中的文本未在第一个视图中显示

我有以下简单的设置:

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 android-viewpager pagertabstrip

14
推荐指数
1
解决办法
2484
查看次数

在导航抽屉中定位actionLayout

我有以下设置:

<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定位在菜单项的中间?

android menu navigationview

14
推荐指数
1
解决办法
5112
查看次数

Porter-Duff:不同形状的不同行为?

我有以下布局:

            <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 shape porter-duff

13
推荐指数
1
解决办法
741
查看次数

以编程方式将MenuItem添加到特定位置或组的菜单

我有一个

<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

android menuitem android-navigationview

11
推荐指数
1
解决办法
2567
查看次数

grails def vs Object vs Void

这3个有什么区别?

def search(String id) {
 //code
}

Object search(String id) {
 //code
}

void search(String id) {
 //code
}
Run Code Online (Sandbox Code Playgroud)

特别是def和之间Object.

groovy

10
推荐指数
1
解决办法
3240
查看次数

RecyclerView仅在滚动时更新

我有一个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 recycler-adapter android-recyclerview

10
推荐指数
2
解决办法
2407
查看次数

设置SupportActionBar字幕多行

我有以下设置:

<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

9
推荐指数
1
解决办法
1440
查看次数

Android 4.4:低功耗蓝牙; 无需扫描即可连接BLE设备

我的应用程序将连接到蓝牙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 bluetooth

7
推荐指数
2
解决办法
4528
查看次数