如何将AdMob放在Android操作栏屏幕顶部(上方)?
我试图在屏幕顶部(Android操作栏上方)放置AdMob广告。如何将AdMob放在Android操作栏屏幕顶部(上方)?,android,android-layout,android-actionbar,admob,Android,Android Layout,Android Actionbar,Admob,我试图在屏幕顶部(Android操作栏上方)放置AdMob广告。 黄色=动作条 红色=内容 绿色=AdMob 我发现的一个方法是在屏幕底部放置一个广告,并显示Actionbar。但到目前为止,我还不知道如何把它放在屏幕的顶部 我这样试过: private AdView adView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);
- 黄色=动作条
- 红色=内容
- 绿色=AdMob
private AdView adView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// main view setup
setContentView(R.layout.main);
this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
// actionbar setup
ActionBar actionBar = getActionBar();
actionBar.setTitle("Search");
actionBar.setDisplayHomeAsUpEnabled(true);
final LinearLayout content = (LinearLayout) findViewById(android.R.id.content).getParent();
// Create the adView
adView = new AdView(this, AdSize.BANNER, "ID");
// Lookup your LinearLayout assuming it’s been given
// the attribute android:id="@+id/mainLayout"
// Add the adView to it
FrameLayout.LayoutParams parm = (FrameLayout.LayoutParams) content.getLayoutParams();
parm.gravity = Gravity.TOP;
content.addView(adView);
// Initiate a generic request to load it with an ad
AdRequest adRequest = new AdRequest();
adRequest.addTestDevice("TEST_DEVICE_ID");
adView.loadAd(adRequest);
}
下面您可以看到我的应用程序的层次结构查看器的一部分。视图“id/main”是我的主要布局。
如图所示,ActionBar有一个名为“id/action\u bar\u container”的id。在上面的代码中,我设法访问了FrameLayout“content”,但无法访问action\u bar\u容器视图。因为它们位于同一层次结构级别(我认为),所以应该可以以某种方式访问ActionBar视图
但它不起作用:
任何关于如何实现这一点的想法,或是它如何工作的链接,或是它不工作的官方声明。import android.os.Bundle;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import com.actionbarsherlock.app.ActionBar;
import com.actionbarsherlock.app.SherlockActivity;
public class MainActivity extends SherlockActivity {
private ActionBar bar;
@Override
protected void onCreate(Bundle savedInstanceState) {
setTheme(R.style.Theme_Sherlock);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
bar = getSupportActionBar();
LayoutInflater inflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View customView = (View)inflater.inflate(R.layout.custom_view, null); //<-- put your ad instead of this
bar.setDisplayOptions(
ActionBar.DISPLAY_SHOW_CUSTOM,
ActionBar.DISPLAY_SHOW_CUSTOM | ActionBar.DISPLAY_SHOW_HOME
| ActionBar.DISPLAY_SHOW_TITLE);
bar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
bar.setCustomView(customView, new ActionBar.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.MATCH_PARENT));
}
@Override
public boolean onCreateOptionsMenu(com.actionbarsherlock.view.Menu menu) {
getSupportMenuInflater().inflate(R.menu.test_menu, menu);
return super.onCreateOptionsMenu(menu);
}
}
导入android.view.LayoutInflater;
导入android.view.view;
导入android.view.ViewGroup;
导入com.actionbarsherlock.app.ActionBar;
导入com.actionbarsherlock.app.SherlockActivity;
公共类MainActivity扩展了SherlockActivity{
私人行动吧;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
setTheme(R.style.Theme_Sherlock);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
bar=getSupportActionBar();
LayoutFlater充气器=(LayoutFlater)getSystemService(Context.LAYOUT\u充气器\u服务);
View customView=(View)充气器。充气(R.layout.custom_View,null);//据我所知,一旦您选择使用ActionBar,它将被添加到(UI层次结构)比布局更高的级别
这意味着你无法控制它的位置,以及它上面的位置
布局从操作栏下方开始,在屏幕底部结束
在我看来,如果你真的找到了一种方法来做你想做的事情,它将是非常不完整的。你说你有内容框架布局参考。你能得到它的父视图吗?将它转换为LinearLayout,然后在第一个位置添加你的视图
您可以在任何视图上使用getRootView()
,或者getWindow().getDecorView()
来获取PhoneDecorView
。它有一个子项-垂直线性布局
将布局作为第一个子项添加到其中
请注意,这是一个糟糕的想法。从用户体验的角度来看,这是对所有设计准则的可怕打击。出于多种设计原因,操作栏必须位于顶部
其次,这可能会在OEM主题的设备上打破
第三,关于平板电脑在景观中的应用,你真的会在顶部有这么大的一个酒吧吗
总之,是的,这是可能的,但这是一个可怕的想法。不要这样做。这似乎不值得赏金,但前面的一个问题回答了这个问题:
诀窍是从使用谷歌actionbar切换到actionbarsherlock库。这对你的应用来说可能是个好主意,因为它允许你在旧版本的android上支持actionbar
用户声称已经实现了这一点。在横向模式下,你不能在操作栏上方放置任何东西,我花了数周的时间来尝试,直到我最终放弃,并将我自己的操作栏放在顶部,如果你是纵向的-这将帮助你感谢答案。似乎你的解决方案只有在启用导航模式选项卡的情况下才有效?所以你没有“找不到任何其他解决方案,创建了自己的标题栏,根本没有使用actionbar?是的,我使用了TabIndicator,这类似于带有viewpager的普通listview,很容易实现,但它看起来与actionbar不完全一样。”does@viperbone您好,您有完整的示例解决方案代码吗?我遇到了一些问题试着这样做是不可能的fragments@Gorets不,对不起,在这种情况下我帮不了你。你知道它如何与内置的Android ActionBar一起工作吗?嗨,多斯,谢谢你的回答。我添加了一张层次视图的图片。不过我认为应该可以这样做。小心!这适用于我的Galaxy S3 mini,但在我的Galaxy S4上是com.android.internal.widget.ActionBarOverlayLayout而不是LinearLayout。对我来说,更好的解决方案是在decorView和内容视图之间插入我自己的LinearLayout。